- 締切済み
電話番号 正規表現
このスレッドは、http://oshiete1.goo.ne.jp/qa3565776.htmlから移動してきました。私が追記する欄がなくなってしまったことと、内容をまとめたかったからです。マルチスレッドにならないように以前のスレッドは締め切ります。 電話番号の判定に関する正規表現 $tel1は市外局番、 $tel2は市内局番、 $tel3はお客様番号 ついでに$tel4は内線番号としたい。 それでどのような判定を正規表現でしたいかというと 1)まず、この電話番号入力欄は入力しても空欄でもよい。 2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、$tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。 3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が入力されている必要がある。 4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。 これってどのようなコードになるのでしょうか? ちなみに私が考えているコードを書いときますが、数字以外でも入力できてしまいます。入力がある場合は、数字しか入力できないようにしているはずなのに... <?php if($tel1 != "" or $tel2 != "" or $tel3 != "") { if($tel1 == "" or $tel2 == "" or $tel3 == "") { if(!ereg("^[0-9]+$", $tel1) or !ereg("^[0-9]+$", $tel2) or !ereg("^[0-9]+$", $tel3) or !ereg("^([0-9]+|\t)$", $tel4)) { echo '電話番号不正確'; } } }else{ echo '電話番号正確'; } ?> 以下は、目指す表示結果です。 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 空欄 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = a $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号不正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 101 この場合、「電話番号不正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = a この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 空欄 この場合、「電話番号正確」としたい。 $tel1 = 123 $tel2 = 456 $tel3 = 789 $tel4 = 101 この場合、「電話番号正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 空欄 以下のコードをwpさんに教えてもらったが、現在、以下の問題点が存在する。 <?php if(!is_numeric($tel4)) echo "電話番号不正確"; ?> <?php $ret1 = true; $ret2 = true; $ret3 = true; if( ! is_numeric($tel1)) $ret1 = false; if( ! is_numeric($tel2)) $ret2 = false; if( ! is_numeric($tel3)) $ret3 = false; if($ret1 and $ret2 and $ret3) echo "電話番号正確"; else echo "電話番号不正確"; ?> 問題1)上記のコードではtel4をtel1,tel2,$tel3から切り離して取り扱っているため下記がただしく判定できない。 この場合、「電話番号不正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 101 問題2) 下記の条件を一まとめにして >1)まず、この電話番号入力欄は入力しても空欄でもよい。 >2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、$tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。 >3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が入力されている必要がある。 >4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。 一度だけ、「echo "電話番号正確";」又は「echo "電話番号不正確";」を出力したいわけですが、それができない。($tel1,$tel2,$tel3で、「echo "電話番号正確";」又は「echo "電話番号不正確";」の判定結果を出力、そして、別途、$tel4で、「echo "電話番号正確";」又は「echo "電話番号不正確";」の判定結果を出力とはしたくないわけです。) 問題3) >1)まず、この電話番号入力欄は入力しても空欄でもよい。 としたいのだが、私の記憶ではis_numericを使用した場合は空欄を受け付けなかったと思う。つまり下記が正しく判定できない。 この場合、「電話番号正確」としたい。 $tel1 = 空欄 $tel2 = 空欄 $tel3 = 空欄 $tel4 = 空欄 また、is_numericは[0-9]以外にも「+」なども受け付けてしまったような気がする。 どなたかお分かりの方がおられましたら、コードを修正するかコードを教えて下さい。
- みんなの回答 (2)
- 専門家の回答
補足
tany180sさん ご回答ありがとうございました。 理解にしばらく時間がかかります。