- ベストアンサー
漢字などを正規表現でパターンマッチさせる方法?
こんにちは,よろしくお願いします。 名前(姓と名に分けて)を入力してもらうフォームを作っています。 姓名を日本語,つまり,漢字,ひらがな,カタカナを全角(2バイト文字?)で入力してもらいたいと考えています。 ぜんぜんわからないのですが,パターンを次のように考えて, var pattern = "[亜-熙ぁ-んァ-ヶ]+"; if(seimei.match(pattern)){ 上記のようにやってみたらうまくいったように思えましたが,「蓬莱」や「紀香」などの漢字を入力するとマッチしません。 文字セットは”UTF-8”を使っています。 すべての漢字,ひらがな,カタカナをマッチさせるようにするにはどのようなパターンで行えばいいのでしょうか?教えてください。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
日本語入力ソフト(ことえり、MS-IME、ATOKなど)の文字コード表を見れば、一覧できます。 unicodeでは「ん」の次に「う゛」( う に点々)や「ゝ」「ゞ」という文字(直前の文字を続けるという意味の文字)もありますね。 手っ取り早く「ぁ-龥」なら記号も含まれますし、漢字だけなら「一」から「龥」まででいいと思います。 「日本語」を調べるのか「名前」で調べるのかで方法は異なりますが、 名前なら人名用漢字しか使えないので、人名用漢字一覧を作って、それに含まれない文字が入ってたらNGとかにしないとダメなのでは? あと、留学生観光客海外からの登録など、外国人ならアルファベット、ハングル、中国語(中国漢字)、その他日本語以外の文字もたくさんありますが、 そう言う人たちは論外?
その他の回答 (4)
- benneb
- ベストアンサー率0% (0/2)
はずしてるかもしれませんが、 単に英数字を禁止にして、英数字が入っていたらアラートを出すようにするとかじゃダメですか?
お礼
bennebさん,ありがとうございました。 確かにそのような方法もありますね。ただ,漢字以外のすべての記号等やハングル等の外国語も禁止するには,ちょっと煩雑かなと感じました。 これからもよろしくお願いします。ありがとうございました。
- pick52
- ベストアンサー率35% (166/466)
あ、「紀香」を忘れてた。 '紀香'='\u7d00\u9999' です。 他の漢字もIMEなどから漢字コード表を使用してUnicodeのコード範囲を 調べてみてください。 (ぼくはATOK使って調べました)
お礼
pick52さんありがとうございました。 なるほど,このようにして一覧を見ることができるのですね。初めて知りました。 今後とも,よろしくお願いします。 ありがとうございました。
- pick52
- ベストアンサー率35% (166/466)
最近のJavaScriptではエンコードは関係なく文字列はUnicodeと 見なされます(JSのバージョン依存ですが)。 なので、正規表現でもUnicodeを使用します。 // '\u84ec' = '蓬' / '\u83b1' = '莱' alert('蓬莱'.match(/[\u84ec\u83b1]+/g)); これでマッチするはずです。
- yambejp
- ベストアンサー率51% (3827/7415)
UNICODEでは亜-熙の範囲に蓬や莱は入っていませんね 漢字の場合範囲も広く、コード体系によって順番もばらばらですし 正規表現での絞り込みはあまり有効ではないと思います
お礼
yambejpさんありがとうございます。確かに有効ではないような気がしてきました。これからもよろしくお願いします。
お礼
talooさん,ありがとうございました。 文字コードの実像をイメージすることができました。このようになっているのですね。なるほど。 MS-IMEでは,0x9fa5などのようにコードが記述してありましたが,「龥」のような表し方はなんという表し方なのでしょうか? また,具体的に「0x9fa5」はどのように表すのでしょうか?もしよろしければ教えてください。 また,[一-龥]のように記述しても,エラーが出てしまいました。このような表記法で正規表現を記述する際には,どのような形式で記述すればよいのでしょうか? もし,よろしければ教えていただけるとありがたいです。よろしくお願いします。 ちなみに,今回は[一-龥]のように記述を行って,事なきを得ました。 ひとまず,ありがとうございました。 〔追伸〕 お礼を投稿しようとして気づきました。上記の漢字は,このページではこのように自動変換されてしまうのですね。でも,このような表し方をなんと言うのでしょうか?ご存知でしたら上記の私の疑問についてお答えいただけるとありがたいです。