電話番号 正規表現
このスレッドは、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]以外にも「+」なども受け付けてしまったような気がする。
どなたかお分かりの方がおられましたら、コードを修正するかコードを教えて下さい。
お礼
おかげさまでできました、ありがとうございます。