- ベストアンサー
正規表現で電話番号のバリデーションを行う方法
- 正規表現を使って電話番号のバリデーションを行う方法について質問です。現在のコードでは市外局番がなくても通るようにしたいと考えていますが、うまくいきません。正しいバリデーションを実現するためにはどのようにコードを書けば良いのでしょうか?
- 質問:正規表現を使用した電話番号のバリデーションについて教えてください。
- 正規表現を使って電話番号のバリデーションを行いたいのですが、市外局番がなくても通るようにするにはどのようにコードを書けば良いのでしょうか?
- みんなの回答 (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"; } } ?>
その他の回答 (5)
>> あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか? ほかの回答見るまで気づかなかった。 実家は4桁ですが・・・まさか5桁まであるとは・・・ http://www.sentworks-job.jp/oyakudati/tel/mie.html
お礼
お返事が遅くなりました^^; 5桁の市外局番あるんですね・・・ これは注意が必要ですね!
蛇足ですが、 「^」 先頭にマッチ。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/10359)
| の前後に空白が入ってますので、取り除いてください。 ^ が文字列先頭を意味するのは正規表現の先頭の時だけです。 $ が文字列末尾を意味するのは正規表現の末尾の時だけです。
- Tacosan
- ベストアンサー率23% (3656/15482)
「いずれのケースにも当てはまらないのではじくようにしたい」のなら, 「はじかれます」は期待する動作そのものだから何も問題になっていないのでは? あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか?
- kmee
- ベストアンサー率55% (1857/3366)
$ | ^ |の前後に空白があるようですが、これはわざとでしょうか?
お礼
確かに実在するかはチェックしないので簡単に考えたほうが良かったですね。 他の方からのご指摘の通り無駄なスペースも入れていたのでとても勉強になりました! ありがとうございます^^