トップ回答者
携帯からの投稿で絵文字の入力を制限するためには

質問
-
おせわになります。
現在、VS2008でショッピングサイトを構築しております。
携帯対応ということで、会員登録フォームにおいて、名前などの入力項目に絵文字を
入力させないようにしたいと思っております。
1.登録者がどのキャリアであるかを判定
2.各キャリアに合わせて、入力値より絵文字が含まれているかチェック
3.含まれていればエラー表示
以上のステップです。
ここで、2.のチェックができなくて困ってます。
いろいろなサイトを探したのですが、PerlやPHPの解説はあったのですが、ASP.NETは
見つけることができませんでした。
絵文字チェックをやった方がおられましたらご教授いただきたく投稿させていただきました。
また、参考サイトもあればお教え願えないでしょうか?
どうぞ、よろしくお願い致します。
回答
-
> いろいろなサイトを探したのですが、PerlやPHPの解説はあ
> ったのですが、ASP.NETは見つけることができませんでした。Perl や PHP のコードを .NET Framework のクラスライブラリを
使った C# または VB.NET のコードに移植する知識はお持ちなの
でしょうか?携帯、絵文字、正規表現をキーワードにしてググってみると以下
のようなページが見つかりますが、上記質問の答えが Yes であれ
ば、これらの情報を基に対応できませんか?iモードの絵文字を検出する正規表現
http://ke-tai.org/blog/2007/10/29/iemoji_regex/ソフトバンクの絵文字を検出する正規表現
http://ke-tai.org/blog/2007/11/10/sbemojiregex/それとも、ASP.NET ベースの Web アプリの、そのものずばりの
サンプルコードを求めておられるのでしょうか?もう少し具体的に何を知りたいか書いていただけると、有用なレ
スがつきやすいと思います。 -
> 簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチ
> できなかったのです。入力された値を何に変換かけて、正規表現すればいいの
> かわかりません。具体的にどのようにしたのですか?
ASP.NET の Web アプリのサーバー側のプログラムでは文字列は Unicode で扱わ
れるので、絵文字に該当する Unicode 文字が分かれば、正規表現を使ってチェッ
クできると思います。以下のページが参考にならないでしょうか?
ASP.NET の正規表現
http://msdn.microsoft.com/ja-jp/library/ms972966.aspxユーザーが TextBox などに入力して POST した文字列をサーバー側で取得したと
き、上記のページ「携帯電話の絵文字」に書いてある Unicode 文字になるのかど
うか分かりませんが、試してみてはいかがでしょう?ちょっと乱暴かもしれませんが、外字全部(U+E000〜U+F8FF)を対象としてもいい
かもしれません。> で、asp.netのサンプルがあれば理解が早いかなと思いました。
ASP.NET のそのものずばりのサンプルはなさそうです(自分が探した限りですが)。
- 回答としてマーク 山本春海 2010年8月5日 7:53
-
C# のコンソールアプリですが、i-mode 絵文字入りの Shift_JIS コードを String 型の
文字列に変換し、正規表現を使って絵文字の有無のチェックおよび除去するサンプルを
作りました。全部の i-mode 絵文字を試したわけではありませんが、 i-mode 絵文字の有無のチェッ
クおよび除去は以下のサンプルで可能でした。au, Softbank, emobile も、先に紹介した「携帯電話の絵文字」のページの Unicode で
pattern を作れば、チェックや除去は可能だと思います。なお、保証はできませんので、ご自分で十分検証してくださいね。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;namespace EmojiCheck
{
class Program
{
static void Main(string[] args)
{
// testfile.txt は試験用の Shift_JIS のテキストファイル。
// 絵文字入力ソフト「i絵文字」で i-mode 絵文字を挿入できる。
// http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/tool/index.html
string path = "testfile.txt";if (File.Exists(path))
{
string text = string.Empty;using (FileStream fs = File.Open(path, FileMode.Open))
{
byte[] b = new byte[(int)fs.Length];
Encoding enc = Encoding.GetEncoding("shift_jis");
fs.Read(b, 0, b.Length);
text = enc.GetString(b);
}Console.WriteLine(text);
Console.WriteLine("-------------------------------------------------------------");// i-mode 絵文字の Unicode 表現
string pattern = @"[\uE63E-\uE6A5]|[\uE6AC-\uE6AE]|[\uE6B1-\uE6BA]|[\uE6CE-\uE757]";
if (Regex.IsMatch(text, pattern))
{
Console.WriteLine("i-mode 絵文字があります。");
}
else
{
Console.WriteLine("絵文字はありません。");
}
Console.WriteLine("-------------------------------------------------------------");// 絵文字を除去した文字列を取得
Regex rgx = new Regex(pattern);
string outputStr = rgx.Replace(text, "");
Console.WriteLine(outputStr);
}
}
}
}- 回答としてマーク ブロンコ 2010年9月14日 7:33
すべての返信
-
> いろいろなサイトを探したのですが、PerlやPHPの解説はあ
> ったのですが、ASP.NETは見つけることができませんでした。Perl や PHP のコードを .NET Framework のクラスライブラリを
使った C# または VB.NET のコードに移植する知識はお持ちなの
でしょうか?携帯、絵文字、正規表現をキーワードにしてググってみると以下
のようなページが見つかりますが、上記質問の答えが Yes であれ
ば、これらの情報を基に対応できませんか?iモードの絵文字を検出する正規表現
http://ke-tai.org/blog/2007/10/29/iemoji_regex/ソフトバンクの絵文字を検出する正規表現
http://ke-tai.org/blog/2007/11/10/sbemojiregex/それとも、ASP.NET ベースの Web アプリの、そのものずばりの
サンプルコードを求めておられるのでしょうか?もう少し具体的に何を知りたいか書いていただけると、有用なレ
スがつきやすいと思います。 -
なかむらさん、SuferInWwwさん、こんにちは。
返信くださって有難うございます。
> Perl や PHP のコードを .NET Framework のクラスライブラリを
> 使った C# または VB.NET のコードに移植する知識はお持ちなの
> でしょうか?簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチできなかったのです。入力された値を何に変換かけて、正規表現すればいいのかわかりません。
で、asp.netのサンプルがあれば理解が早いかなと思いました。
絵文字を表示したいのではなく、入力値に絵文字があるかどうかわかればそれだけでいいです。入っていればエラーメッセージを出して、再入力を促すといった処理を考えています。
-
> 簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチ
> できなかったのです。入力された値を何に変換かけて、正規表現すればいいの
> かわかりません。具体的にどのようにしたのですか?
ASP.NET の Web アプリのサーバー側のプログラムでは文字列は Unicode で扱わ
れるので、絵文字に該当する Unicode 文字が分かれば、正規表現を使ってチェッ
クできると思います。以下のページが参考にならないでしょうか?
ASP.NET の正規表現
http://msdn.microsoft.com/ja-jp/library/ms972966.aspxユーザーが TextBox などに入力して POST した文字列をサーバー側で取得したと
き、上記のページ「携帯電話の絵文字」に書いてある Unicode 文字になるのかど
うか分かりませんが、試してみてはいかがでしょう?ちょっと乱暴かもしれませんが、外字全部(U+E000〜U+F8FF)を対象としてもいい
かもしれません。> で、asp.netのサンプルがあれば理解が早いかなと思いました。
ASP.NET のそのものずばりのサンプルはなさそうです(自分が探した限りですが)。
- 回答としてマーク 山本春海 2010年8月5日 7:53
-
-
C# のコンソールアプリですが、i-mode 絵文字入りの Shift_JIS コードを String 型の
文字列に変換し、正規表現を使って絵文字の有無のチェックおよび除去するサンプルを
作りました。全部の i-mode 絵文字を試したわけではありませんが、 i-mode 絵文字の有無のチェッ
クおよび除去は以下のサンプルで可能でした。au, Softbank, emobile も、先に紹介した「携帯電話の絵文字」のページの Unicode で
pattern を作れば、チェックや除去は可能だと思います。なお、保証はできませんので、ご自分で十分検証してくださいね。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;namespace EmojiCheck
{
class Program
{
static void Main(string[] args)
{
// testfile.txt は試験用の Shift_JIS のテキストファイル。
// 絵文字入力ソフト「i絵文字」で i-mode 絵文字を挿入できる。
// http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/tool/index.html
string path = "testfile.txt";if (File.Exists(path))
{
string text = string.Empty;using (FileStream fs = File.Open(path, FileMode.Open))
{
byte[] b = new byte[(int)fs.Length];
Encoding enc = Encoding.GetEncoding("shift_jis");
fs.Read(b, 0, b.Length);
text = enc.GetString(b);
}Console.WriteLine(text);
Console.WriteLine("-------------------------------------------------------------");// i-mode 絵文字の Unicode 表現
string pattern = @"[\uE63E-\uE6A5]|[\uE6AC-\uE6AE]|[\uE6B1-\uE6BA]|[\uE6CE-\uE757]";
if (Regex.IsMatch(text, pattern))
{
Console.WriteLine("i-mode 絵文字があります。");
}
else
{
Console.WriteLine("絵文字はありません。");
}
Console.WriteLine("-------------------------------------------------------------");// 絵文字を除去した文字列を取得
Regex rgx = new Regex(pattern);
string outputStr = rgx.Replace(text, "");
Console.WriteLine(outputStr);
}
}
}
}- 回答としてマーク ブロンコ 2010年9月14日 7:33
-
C# のコンソールアプリですが、i-mode 絵文字入りの Shift_JIS コードを String 型の
文字列に変換し、正規表現を使って絵文字の有無のチェックおよび除去するサンプルを
作りました。全部の i-mode 絵文字を試したわけではありませんが、 i-mode 絵文字の有無のチェッ
クおよび除去は以下のサンプルで可能でした。au, Softbank, emobile も、先に紹介した「携帯電話の絵文字」のページの Unicode で
pattern を作れば、チェックや除去は可能だと思います。なお、保証はできませんので、ご自分で十分検証してくださいね。
SurferOnWwwさん、返信が遅くなってしまし申し訳ございません。
いま、サンプルで作っていただいたソースを改造して実装したところです。
デバッグ環境では、絵文字を認識できたので、テストサーバーにアップしてこれからテストしてみます。
結果はまた報告させていただきます。