• ベストアンサー

正規表現に関して

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

  • PHP
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • 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で開発しています。

関連するQ&A

  • phpの正規表現でカタカナ+スペース+カタカナ

    phpの正規表現で全角カタカナ+全角スペース+全角カタカナ というパターンを取り出したいのですが、 上手く取り出すことが出来ずに困っております。 どなたかご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現について

    お世話になります。 ●●● ●●● という文字列かどうか判断する正規表現を作成したいです。 条件としては、 ・「文字1 (←全角スペース)文字2」という感じで、文字1と文字2に全角スペースが挟まれている感じで、文字列の先頭にも末尾にも空白文字は入ってはいけない(真ん中に1つのみ) ・文字1と文字2には、数字・空白以外の文字が入る(主に感じ・ひらがな・カタカナが入る)(文字数は一文字以上) といったところです。 自分で作成した正規表現は、 $pattern = '/^([\d\S])+ ([\d\S])+$/'; if( !preg_match($pattern,$chkStr) ) print "マッチしていない"; } なんですが、どうもマッチしてほしい文字にマッチしていないようなのです。 お手数ですがご教授ください。

    • ベストアンサー
    • PHP
  • 秀丸正規表現

    日本語の正規表現での置換につまづきまくってます… 正しい指示方法を教えてください。 ※すべて漢字やひらがな、カタカナです。 ※置換したいのはアンダーバーの部分です。 置換したい表現1 ○○○,______××× ○○○,_________××× 置換したい表現2 -○○-_________× -○○-____________× よろしくお願いします。

  • 全角カタカナの正規表現

    if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。  同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。  是非、そのやり方やヒントをおしえてください。  マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。

    • ベストアンサー
    • PHP
  • 漢字などを正規表現でパターンマッチさせる方法?

    こんにちは,よろしくお願いします。 名前(姓と名に分けて)を入力してもらうフォームを作っています。 姓名を日本語,つまり,漢字,ひらがな,カタカナを全角(2バイト文字?)で入力してもらいたいと考えています。 ぜんぜんわからないのですが,パターンを次のように考えて, var pattern = "[亜-熙ぁ-んァ-ヶ]+"; if(seimei.match(pattern)){ 上記のようにやってみたらうまくいったように思えましたが,「蓬莱」や「紀香」などの漢字を入力するとマッチしません。 文字セットは”UTF-8”を使っています。 すべての漢字,ひらがな,カタカナをマッチさせるようにするにはどのようなパターンで行えばいいのでしょうか?教えてください。 よろしくお願いします。

  • 正規表現について

    全角文字と半角文字のスペースの有無を正規表現で検出したいと思っております。 書き方をお教え頂けますでしょうか。 よろしくお願いいたします。

  • Javascript 全角カナ+半角スペース+全角スペースの正規表現について

    初歩的な質問をしてすみません。 一応、自分でも試行錯誤で if (str.match(/[^ア-ンー\- ]+/g)){ alert("フリガナの項目を「全角カタカナ」のみで入力して下さい。"); } という条件を作ってみたのですが、半角スペースを入力したらTrueとなってしまいます。 全角カナ+半角スペース+全角スペース以外はFalseとなる正規表現を教えていただけないでしょうか。 以上、よろしくお願いします。

  • 正規表現を使った入力値のチェック

    こんにちは、yukimura1024です。 perlでブラウザのフォームに入力された値をチェックしたいのですが、 入力された値が「全角文字のみか」と「全角カタカナのみか」 という2種類のチェックのしかたがわかりません。 「数値のみか」のチェックは正規表現を使ってできたのですが、 これと同じように正規表現を使って、この2つの全角チェックをする 方法はないでしょうか? 数値チェックは以下の方法でやっています↓ if ($str_txt_yuubin =~ /[^0-9]/) { print "「郵便番号」を半角数字で入力してください。<br>\n"; } ご存知の方がいましたら教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現による文字列のチェックについて

    文字列の入力チェックで困っています。 入力された文字列が以下の文字のみで構成されているか、正規表現でチェックするにはどうすれば良いか教えてください。 できれば一発でチェックしたいです。 ・全角(漢字、ひらがな、かたかな)※英数字を含め、左記以外の全角は使用禁止 ・半角英数字 ・半角記号(「-」「.」「:」「*」「&」)※後から追加変更される可能性がある Java(UTF-8)とJavaScript(Shift-JIS)それぞれで対応できる方法をお願いいたします。

  • Shift-jisで正規表現

    はじめまして。Perl初心者です。 やりたい事は、フォームからPOST形式で文字データを受け取り、 用意してあるtxtファイルから読み込んだデータの中から、正規表現でマッチするものを探すことです。 Windows環境であることと、入力(フォーム)も出力(表示するブラウザ等)もShift-jisなので、shift-jisで限定しています。 特にencodingを指定しなくても、ひらがなと漢字では上手くいきます。 カタカナと全角数字を入力したとき、上手くいきません。 色々調べていたら、以下のサイトさんで近いことが紹介されていました。 http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#solutions しかし、自身では力不足のため、解決出来ないでいます。どなたか詳しい方、ご教授お願いいたします。

専門家に質問してみよう