北美编号计划正则表达式

Sha*_*pov 2 php regex

验证NAPN号码是正常的正则表达式吗?没有"优化"可能吗?

^\+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}$
Run Code Online (Sandbox Code Playgroud)

Abs*_*ERØ 5

您的链接包含匹配信息:

NPA(编号方案区号) - 允许范围:第一个数字为[2-9],第二个和第三个数字为[0-9].当区号的第二和第三位数相同时,该代码称为易于识别的代码(ERC).ERC指定特殊服务; 例如,888用于免费服务.NANP不分配区域代码,其中9为第二个数字.

NXX(中央局) - 允许范围:第一个数字为[2-9],第二个和第三个数字为[0-9](但是,如果第二个数字也是",则第三个数字不能为"1" 1" ).

xxxx(订户号码) - 四位数字中的每一个都为[0-9].

如果要+1在开头省略,则可以使用以下内容匹配10位数字.他们预防的唯一的事情是包含一些3位本地代码等的数量911,611,411,等于是使这项工作我们正在确保在该中心办公室部分第一之后的下一个2个位数数字不是(?!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";    
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

(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.
Run Code Online (Sandbox Code Playgroud)