• ベストアンサー

正規表現に関して

初歩的な質問で済みません。。 今、入力内容が人名で有るのかを調べる関数を作ろうとしています。 具体的には、 1、漢字、ひらがな、全角カタカナでの入力であるか。 2、性名の間に全角スペースが入っているか。(出来れば、外国名の場合はミドルネームの前後にスペース) を判別したいのです。 正規表現を使えば良いと思うのですが、webを調べましたが具体的な記事が見つかりませんでした。 どうやら自分には正規表現が理解しがたいようです。。 詳しい方、解りやすく教えて下さい!

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.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"; } ?>

amcars
質問者

お礼

返事が遅れて済みません。 開発用のPCを離れていました。 どうやら、全く問題なく機能しているようです。 文字コードを指定する必要が有ると言う事ですかね。 考えて下さって、有り難うございます。 これで作業が進みます。

その他の回答 (3)

  • Suzi
  • ベストアンサー率38% (130/334)
回答No.3

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'  が、近似値と思ったのですが、「ひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです」・・・あれ、何ででしょう?「一-龠」の中にスペースが含まれるとか?  レベル低くて済みませんでした。 >>これを元に自分も考えてみようと思います。  結果が分かったら教えてくださいませ。

amcars
質問者

お礼

すみません、返事が遅れてしまいました。 どうやらバグのようです。。 参考サイト↓ http://mlog.euqset.org/archives/php-users.php.gr.jp/29514.html 半角スペースを使用すれば問題ないようですが。。。 姓名の間に半角スペースというのはユーザビリティーが最悪に。。 たしかに、名字がひらがなは無さそうなのでこのまま使おうと思います。 まぁよく考えたら、姓名別々に入力してPHP側でスペースを入れて結合するのが一番楽かなと。。。 今回は助けていただきありがとうございました。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

マルチバイト対応のmb_ereg関数を使って、英数字と半角カタカナ以外 の文字全部の1文字以上としてしまえばどうでしょう。 if (mb_ereg_match("[^_a-zA-Z0-9ア-ン]+( [^_a-zA-Z0-9ア-ン]+)+", 対象変数))

amcars
質問者

お礼

回答ありがとうございます。 簡単な条件分岐のコードで試してみましたが、 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)
回答No.1

$name = '斎 藤太郎'; if(preg_match('/^[ア-ンあ-ん亜-腕弌-熙a-zA-Z]+[ | ][ァ-ヶぁ-ん亜-腕弌-熙a-zA-Z]+$/', $name) > '0') print "全角スペースが入っています"; else print "全角スペースが入っていません"; -------------------------- (カタカナ、ひらがな、漢字)の文字 + 全角/半角スペース1個 + (カタカナ、ひらがな、漢字)の文字の正規表現です。 上記のはeuc-jpです。漢字は第二水準まで。 utf-8 にすると、亜-腕弌-熙 → 一-龠 に変更すると全ての漢字になります。 shift_jisは未確認。 厳密な確認をしていませんが。

amcars
質問者

お礼

回答有り難うございます。 概ね成功ですが、ただひらがなのみでの入力の場合スペースを入れなくても真になってしまうようです。 これを元に自分も考えてみようと思います。 ちなみにutf-8で開発しています。