none
携帯からの投稿で絵文字の入力を制限するためには RRS feed

  • 質問

  • おせわになります。

    現在、VS2008でショッピングサイトを構築しております。

    携帯対応ということで、会員登録フォームにおいて、名前などの入力項目に絵文字を

    入力させないようにしたいと思っております。

    1.登録者がどのキャリアであるかを判定

    2.各キャリアに合わせて、入力値より絵文字が含まれているかチェック

    3.含まれていればエラー表示

    以上のステップです。

    ここで、2.のチェックができなくて困ってます。

    いろいろなサイトを探したのですが、PerlやPHPの解説はあったのですが、ASP.NETは

    見つけることができませんでした。

    絵文字チェックをやった方がおられましたらご教授いただきたく投稿させていただきました。

    また、参考サイトもあればお教え願えないでしょうか?

    どうぞ、よろしくお願い致します。

    2010年7月22日 3:17

回答

  • @IT の記事が参考になるかもしれません。

    http://www.atmarkit.co.jp/fdotnet/dotnettips/736emoji/emoji.html

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年7月22日 7:57
  • > いろいろなサイトを探したのですが、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 アプリの、そのものずばりの
    サンプルコードを求めておられるのでしょうか?

    もう少し具体的に何を知りたいか書いていただけると、有用なレ
    スがつきやすいと思います。

    2010年7月23日 13:49
  • > 簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチ
    > できなかったのです。入力された値を何に変換かけて、正規表現すればいいの
    > かわかりません。

    具体的にどのようにしたのですか?

    ASP.NET の Web アプリのサーバー側のプログラムでは文字列は Unicode で扱わ
    れるので、絵文字に該当する Unicode 文字が分かれば、正規表現を使ってチェッ
    クできると思います。

    以下のページが参考にならないでしょうか?

    携帯電話の絵文字
    http://ja.wikipedia.org/wiki/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97

    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
    2010年7月27日 13:42
  • 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
    2010年8月1日 3:49

すべての返信

  • @IT の記事が参考になるかもしれません。

    http://www.atmarkit.co.jp/fdotnet/dotnettips/736emoji/emoji.html

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年7月22日 7:57
  • > いろいろなサイトを探したのですが、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 アプリの、そのものずばりの
    サンプルコードを求めておられるのでしょうか?

    もう少し具体的に何を知りたいか書いていただけると、有用なレ
    スがつきやすいと思います。

    2010年7月23日 13:49
  • なかむらさん、SuferInWwwさん、こんにちは。

    返信くださって有難うございます。

    > Perl や PHP のコードを .NET Framework のクラスライブラリを
    > 使った C# または VB.NET のコードに移植する知識はお持ちなの
    > でしょうか?

    簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチできなかったのです。入力された値を何に変換かけて、正規表現すればいいのかわかりません。

    で、asp.netのサンプルがあれば理解が早いかなと思いました。

    絵文字を表示したいのではなく、入力値に絵文字があるかどうかわかればそれだけでいいです。入っていればエラーメッセージを出して、再入力を促すといった処理を考えています。

     

    2010年7月27日 4:07
  • > 簡単にできると思って試してみましたが、文字コードの知識が乏しく、マッチ
    > できなかったのです。入力された値を何に変換かけて、正規表現すればいいの
    > かわかりません。

    具体的にどのようにしたのですか?

    ASP.NET の Web アプリのサーバー側のプログラムでは文字列は Unicode で扱わ
    れるので、絵文字に該当する Unicode 文字が分かれば、正規表現を使ってチェッ
    クできると思います。

    以下のページが参考にならないでしょうか?

    携帯電話の絵文字
    http://ja.wikipedia.org/wiki/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97

    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
    2010年7月27日 13:42
  • SurferOnWwwさん、こんにちは。

    > ユーザーが TextBox などに入力して POST した文字列をサーバー側で取得したと
    > き、上記のページ「携帯電話の絵文字」に書いてある Unicode 文字になるのかど
    > うか分かりませんが、試してみてはいかがでしょう?

    おそらく、入力された値をTextBox.textで取得し、その文字列を何かを使って

    何かに変換して、正規表現なんかで探しだすのだと思います。

    ここの何かを使って何かに変換ってところが全くちんぷんかんぷんです(TT)

    asp.netのサンプルってなかったですよね

    2010年7月30日 1:09
  • > ここの何かを使って何かに変換ってところが全くちんぷんかん
    > ぷんです(TT)

    そんなに難しいことではないのですから、その気になって、紹介し
    たページをよく読めば分かると思いますけど。

    すくなくとも、50% ぐらいは理解していただかないと、言葉が通じ
    ないのと同じですので、掲示板でのやりとりで解決するのは難
    しいです。ぜひ一度読んでみてください。

    > asp.netのサンプルってなかったですよね

    先にレスしたとおり、ないと思います。

    2010年7月30日 13:36
  • 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
    2010年8月1日 3:49
  • C# のコンソールアプリですが、i-mode 絵文字入りの Shift_JIS コードを String 型の
    文字列に変換し、正規表現を使って絵文字の有無のチェックおよび除去するサンプルを
    作りました。

    全部の i-mode 絵文字を試したわけではありませんが、 i-mode 絵文字の有無のチェッ
    クおよび除去は以下のサンプルで可能でした。

    au, Softbank, emobile も、先に紹介した「携帯電話の絵文字」のページの Unicode で
    pattern を作れば、チェックや除去は可能だと思います。

    なお、保証はできませんので、ご自分で十分検証してくださいね。

    SurferOnWwwさん、返信が遅くなってしまし申し訳ございません。

    いま、サンプルで作っていただいたソースを改造して実装したところです。

    デバッグ環境では、絵文字を認識できたので、テストサーバーにアップしてこれからテストしてみます。

    結果はまた報告させていただきます。

    2010年8月5日 8:57
  • 報告が遅くなりまして申し訳ございませんでした。

    文字コードでいろいろバグもでましたが、上記の方法で、正規表現をして

    チェックすることができました。

    2010年9月14日 7:33