
電話番号の正規表現について質問です。
$value = '000-111-2222';
これだけだと通りますが
function tel( $value ) {
return !preg_match( '/^\d{2,3}\-\d{3,4}\-\d{4}$/', $value );
}
市外局番がなくても通るようにしたくこのようにしましたがはじかれます^^;
function tel( $value ) {
return !preg_match( '/^\d{2,3}\-\d{3,4}\-\d{4}$ | ^\d{2,4}\-\d{3,4}$/', $value );
}
いずれのケースにも当てはまらないのではじくようにしたいのですが、実現するにはどう書けばいいのでしょうか?
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";
}
}
?>
確かに実在するかはチェックしないので簡単に考えたほうが良かったですね。
他の方からのご指摘の通り無駄なスペースも入れていたのでとても勉強になりました!
ありがとうございます^^
No.5
- 回答日時:
>> あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか?
ほかの回答見るまで気づかなかった。
実家は4桁ですが・・・まさか5桁まであるとは・・・
http://www.sentworks-job.jp/oyakudati/tel/mie.html
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);
}
No.3
- 回答日時:
| の前後に空白が入ってますので、取り除いてください。
^ が文字列先頭を意味するのは正規表現の先頭の時だけです。
$ が文字列末尾を意味するのは正規表現の末尾の時だけです。
No.2
- 回答日時:
「いずれのケースにも当てはまらないのではじくようにしたい」のなら, 「はじかれます」は期待する動作そのものだから何も問題になっていないのでは?
あと, この例では問題ないんだけど「市外局番」が 4桁や 5桁の地域はこの世には存在しないんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数字のみを2倍3倍にする...
-
機種依存文字について
-
VBAのコマンドボタンの文字列の...
-
PPT ファイルの文字カウント=...
-
文字の入力で横バー上段、中断...
-
エクセルのCOUNTIFが正しくカウ...
-
ソースコードの1行が長いとき...
-
エクセルVBA 文字列領域が不足...
-
Excel関数「COUNTIF」で”文字”...
-
【VBA】エクセルで最後の不要な...
-
mail()で送信したメールのタイ...
-
メッセージボックスで1025文字...
-
C++で空Enterの入力を判...
-
文字列中の両丸括弧を取り除くV...
-
○分から○時間○分に変換
-
1行ごとに取得して、その改行...
-
C言語の標準入力で改行しない方法
-
Accessの文字数を調べたい
-
文字列のアスタリスク置換
-
IT企業の技術屋にとって全角英...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで<a>タグ内からURLと文字を...
-
、"(ダブルクォーテーション)...
-
正規表現でシングルクォーテー...
-
preg_matchの正規表現で
-
PHPで あるフォルダ内の、特定...
-
VBAを使ってHTMLソースから特定...
-
Excelで数字のみを2倍3倍にする...
-
Smartyで部分一致
-
PHPで変数から1行目だけを取得...
-
正規表現で「0」のみ抽出
-
電話番号のチェック ハイフン...
-
正規表現で、半角大文字と半角...
-
Smartyを使用した、テンプレー...
-
C#でのワイルドカードを使った...
-
preg_matchでエラーが出ます。
-
「半角数字」と「+」を許可する...
-
正規表現パターンの記入方法に...
-
2つのif 構文が1つしか動作し...
-
PHPメールフォーム URLと半角...
-
条件にマッチした場合の指定方...
おすすめ情報