電話番号チェックする正規表現(入力枠1個、ハイフン抜き)
「電話番号 正規表現」で検索するといろいろな正規表現パターンが出てきますが、完璧なものはあまり無いようです。私が必要としていた簡単なものもなかったので、PHPで書いてみました。
どういう条件で使えるかコメントに書いたので、よくご確認ください。総務省の電話番号ルールに従っています。
/**
* 電話番号が正しいか判定する
*
* - 入力枠1個、ハイフン抜きでチェックする
* - 0A0, 0AB, 0ABC (A,B,Cは0以外)から始まる番号だけに対応
* - 「00XY-0市外局番-市内局番-加入者番号」の形式は非対応 (@seeのQ3参照)
* - 10桁(固定電話)と11桁(固定電話)のみ対応
*
* @param string $tel 電話番号
* @return bool 判定結果 (true:正しい電話番号)
* @see [電話番号に関するQ&A](http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a-2001aug.html)
*/
function is_valid_tel_number($tel = "") {
return preg_match("/^0\d{9,10}$/", str_replace("-", "", $tel));
}
動作チェックは書きの通りです。
<?php
/**
* 電話番号が正しいか判定する
*
* - 入力枠1個、ハイフン抜きでチェックする
* - 0A0, 0AB, 0ABC (A,B,Cは0以外)から始まる番号だけに対応
* - 「00XY-0市外局番-市内局番-加入者番号」の形式は非対応 (@seeのQ3参照)
* - 10桁(固定電話)と11桁(固定電話)のみ対応
*
* @param string $tel 電話番号
* @return bool 判定結果 (true:正しい電話番号)
* @see <a href="http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a-2001aug.html" onclick="_gaq.push(['_trackEvent', 'outbound-article', 'http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/q_and_a-2001aug.html', '電話番号に関するQ&A']);" >電話番号に関するQ&A</a>
*/
function is_valid_tel_number($tel = "") {
return preg_match("/^0\d{9,10}$/", str_replace("-", "", $tel));
}
$tels = array(
// NGパターン
"0",
"1-1-1-1",
"uhouho",
"9999999999", // 0から始まってない
"03-333-333", // ケタ不足
"090-9999-999999", // ケタ多すぎ
"012301230123", // ケタ多すぎ
// OKパターン
"03-3200-2222", // 市外局番1桁: 東京など
"043-000-0000", // 市外局番2桁: 千葉
"0166-00-0000", // 市外局番3桁: 旭川
"09913-0-0000", // 市外局番4桁: 硫黄島
"090-0000-0000", // 携帯電話
"050-0000-0000", // 携帯電話
"080-0000-0000", // 携帯電話
);
foreach ($tels as $key => $tel) {
echo "{$key}: {$tel} ... ";
echo is_valid_tel_number($tel) ? "OK" : "NG";
echo "\n";
}
/** End of file */
出力結果
$ php tel_check.php
0: 0 ... NG
1: 1-1-1-1 ... NG
2: uhouho ... NG
3: 9999999999 ... NG
4: 03-333-333 ... NG
5: 090-9999-999999 ... NG
6: 012301230123 ... NG
7: 03-3200-2222 ... OK
8: 043-000-0000 ... OK
9: 0166-00-0000 ... OK
10: 09913-0-0000 ... OK
11: 090-0000-0000 ... OK
12: 050-0000-0000 ... OK
13: 080-0000-0000 ... OK