- ベストアンサー
正規表現に関して
初歩的な質問で済みません。。 今、入力内容が人名で有るのかを調べる関数を作ろうとしています。 具体的には、 1、漢字、ひらがな、全角カタカナでの入力であるか。 2、性名の間に全角スペースが入っているか。(出来れば、外国名の場合はミドルネームの前後にスペース) を判別したいのです。 正規表現を使えば良いと思うのですが、webを調べましたが具体的な記事が見つかりませんでした。 どうやら自分には正規表現が理解しがたいようです。。 詳しい方、解りやすく教えて下さい!
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No2です。以下だめですかねえ、問題ないと思うのですが.. ※ここに投稿する時半角カタカナのア-ンが全角カタカナのア-ンに勝手に変わってます。 <?php mb_internal_encoding("UTF-8"); mb_regex_encoding("UTF-8"); $namae = $_REQUEST['namae']; $patarn = "[^_a-zA-Z0-9ア-ン]+( [^_a-zA-Z0-9ア-ン]+)+"; if(mb_ereg_match($patarn,$namae)){ echo "match"; }else{ echo "unmach"; } ?>
その他の回答 (3)
- Suzi
- ベストアンサー率38% (130/334)
utf-8でしたら、 preg_match('/^[ア-ンあ-ん亜-腕弌-熙a-zA-Z]+[ | ][ァ-ヶぁ-ん亜-腕弌-熙a-zA-Z]+$/', $name) > '0' ↓ preg_match('/^[ア-ンあ-ん一-龠a-zA-Z]+[ | ][ァ-ヶぁ-ん一-龠a-zA-Z]+$/', $name) > '0' ですが、名字がひらがなというのはないような気がしたので、 ↓ preg_match('/^[ア-ン一-龠a-zA-Z]+[ | ][ァ-ヶぁ-ん一-龠a-zA-Z]+$/', $name) > '0' が、近似値と思ったのですが、「ひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです」・・・あれ、何ででしょう?「一-龠」の中にスペースが含まれるとか? レベル低くて済みませんでした。 >>これを元に自分も考えてみようと思います。 結果が分かったら教えてくださいませ。
お礼
すみません、返事が遅れてしまいました。 どうやらバグのようです。。 参考サイト↓ http://mlog.euqset.org/archives/php-users.php.gr.jp/29514.html 半角スペースを使用すれば問題ないようですが。。。 姓名の間に半角スペースというのはユーザビリティーが最悪に。。 たしかに、名字がひらがなは無さそうなのでこのまま使おうと思います。 まぁよく考えたら、姓名別々に入力してPHP側でスペースを入れて結合するのが一番楽かなと。。。 今回は助けていただきありがとうございました。
- yyr446
- ベストアンサー率65% (870/1330)
マルチバイト対応のmb_ereg関数を使って、英数字と半角カタカナ以外 の文字全部の1文字以上としてしまえばどうでしょう。 if (mb_ereg_match("[^_a-zA-Z0-9ア-ン]+( [^_a-zA-Z0-9ア-ン]+)+", 対象変数))
お礼
回答ありがとうございます。 簡単な条件分岐のコードで試してみましたが、 Warning: mb_ereg_match() [function.mb-ereg-match]: mbregex compile err: premature end of char-class in /virtual/shady/public_html/phptest/test2_2.php on line 11 と言うエラーが出てしまいました。。。
- Suzi
- ベストアンサー率38% (130/334)
$name = '斎 藤太郎'; if(preg_match('/^[ア-ンあ-ん亜-腕弌-熙a-zA-Z]+[ | ][ァ-ヶぁ-ん亜-腕弌-熙a-zA-Z]+$/', $name) > '0') print "全角スペースが入っています"; else print "全角スペースが入っていません"; -------------------------- (カタカナ、ひらがな、漢字)の文字 + 全角/半角スペース1個 + (カタカナ、ひらがな、漢字)の文字の正規表現です。 上記のはeuc-jpです。漢字は第二水準まで。 utf-8 にすると、亜-腕弌-熙 → 一-龠 に変更すると全ての漢字になります。 shift_jisは未確認。 厳密な確認をしていませんが。
お礼
回答有り難うございます。 概ね成功ですが、ただひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです。 これを元に自分も考えてみようと思います。 ちなみにutf-8で開発しています。
お礼
返事が遅れて済みません。 開発用のPCを離れていました。 どうやら、全く問題なく機能しているようです。 文字コードを指定する必要が有ると言う事ですかね。 考えて下さって、有り難うございます。 これで作業が進みます。