• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:正規表現について)

正規表現で電話番号のバリデーションを行う方法

このQ&Aのポイント
  • 正規表現を使って電話番号のバリデーションを行う方法について質問です。現在のコードでは市外局番がなくても通るようにしたいと考えていますが、うまくいきません。正しいバリデーションを実現するためにはどのようにコードを書けば良いのでしょうか?
  • 質問:正規表現を使用した電話番号のバリデーションについて教えてください。
  • 正規表現を使って電話番号のバリデーションを行いたいのですが、市外局番がなくても通るようにするにはどのようにコードを書けば良いのでしょうか?

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

考え方としては、市外局番の場合は0から、そうでない場合は数字から始まり 数字でおわるとか、ハイフンが続かないとか、ハイフンで2つないし3つにわかれるとか、 チェックのやりかたはあるけど、しょせん実在するかどうかをチェックできないので無意味 数字とハイフン以外使っていない程度のチェックで十分 <?PHP check("03-1234-5678"); check("0312345678"); check("03---4-8"); check("-"); check("-123-"); check("0a123"); function check($num){ $pattern="/^[0-9\-]+$/"; print $num.":"; if(preg_match($pattern,$num)){ print "ok<br>\n"; }else{ print "ng<br>\n"; } } ?>

dcx147
質問者

お礼

確かに実在するかはチェックしないので簡単に考えたほうが良かったですね。 他の方からのご指摘の通り無駄なスペースも入れていたのでとても勉強になりました! ありがとうございます^^

その他の回答 (5)

noname#244856
noname#244856
回答No.5

>> あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか? ほかの回答見るまで気づかなかった。 実家は4桁ですが・・・まさか5桁まであるとは・・・ http://www.sentworks-job.jp/oyakudati/tel/mie.html

dcx147
質問者

お礼

お返事が遅くなりました^^; 5桁の市外局番あるんですね・・・ これは注意が必要ですね!

noname#244856
noname#244856
回答No.4

蛇足ですが、 「^」 先頭にマッチ。m修飾子をつけたときは行頭にマッチ。 「\A」 先頭にマッチ。 「$」 末尾にマッチ。末尾の改行コードを許可する。m修飾子をつけたときは行末にマッチ。 「\Z」 末尾にマッチ。末尾の改行コードを許可する。 「\z」 末尾にマッチ。末尾の改行コードを許可しない。 こういう違いみなさんご存じですか・・・? 原則的に「\A」と「\z」を用いるべきだとは思います。 あとハイフンのエスケープは不要。 バックスラッシュに関しては個人的に全てエスケープするポリシーを取っているので、見にくければ「\\」は「\」にしてください。 引用符 http://php.net/manual/ja/language.types.string.php function is_valid_phone_number($value) { return preg_match('/\\A(?:\\d{2,3}-\\d{3,4}-\\d{4}|^\\d{2,4}-\\d{3,4})\\z/', $value); }

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

| の前後に空白が入ってますので、取り除いてください。 ^ が文字列先頭を意味するのは正規表現の先頭の時だけです。 $ が文字列末尾を意味するのは正規表現の末尾の時だけです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「いずれのケースにも当てはまらないのではじくようにしたい」のなら, 「はじかれます」は期待する動作そのものだから何も問題になっていないのでは? あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

$ | ^ |の前後に空白があるようですが、これはわざとでしょうか?

関連するQ&A

専門家に質問してみよう