Is it normal regex for validating NAPN numbers? And no "optimizations" possible?
^\+1[2-9](0(?!0)|1(?!1)|2(?!2)|3(?!3)|4(?!4)|5(?!5)|6(?!6)|7(?!7)|8(?!8)|9(?!9))[0-9][2-9]((0|[2-9]){2}|1(?!1)[0-9]|(0|[2-9])1)[0-9]{4}$
あなたのリンクには試合の情報が含まれています:
NPA (Numbering Plan Area Code) - 許容範囲: 1 桁目は [2–9]、2 桁目と 3 桁目は [0-9]。市外局番の 2 桁目と 3 桁目が同じ場合、そのコードは簡単に認識できるコード (ERC) と呼ばれます。ERC は特別なサービスを指定します。例えば、フリーダイヤルサービスの場合は 888 です。NANP は、2 桁目が 9 の市外局番を割り当てていません。
NXX (Central Office) - 許容範囲: 1 桁目は [2–9]、2 桁目と 3 桁目は両方とも [0–9] (ただし、2 桁目も " 1")。
xxxx (加入者番号) -[0 ~ 9] 4 桁のそれぞれ。
先頭の を省略したい場合は+1
、次のようにして 10 桁の数字を一致させることができます。彼らが防いでいるのは911
、611
、411
、 などの 3 桁のローカル コードの一部を含む番号だけです。 number は(?!11)
、否定的な先読みを持つものではありません。
このパターンは、ほとんどの文字列で機能するはずです。
$pattern = '~^\(?([2-9][0-9]{2})\)?[-. ]?([2-9](?!11)[0-9]{2})[-. ]?([0-9]{4})$~';
$numbers = array(
'(800) 555 1212',
'(800) 911 1212',
'(800) 910 1212',
'(800) 901 1212',
'(100) 455 1212',
'(800) 155 1212',
'555 555 1212',
'813.555.1212',
);
foreach($numbers as $number){
if(preg_match($pattern,$number)){
echo "$number is valid.\n";
} else {
echo "$number is invalid. \n";
}
}
出力
(800) 555 1212 is valid.
(800) 911 1212 is invalid.
(800) 910 1212 is valid.
(800) 901 1212 is valid.
(100) 455 1212 is invalid.
(800) 155 1212 is invalid.
555 555 1212 is valid.
813.555.1212 is valid.