首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >北美编号计划

北美编号计划
EN

Stack Overflow用户
提问于 2013-08-22 16:15:13
回答 1查看 3.5K关注 0票数 2

它是否用于验证纳普恩数的正常正则表达式?没有“优化”的可能吗?

代码语言:javascript
复制
^\+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}$
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 16:44:03

您的链接包含匹配的信息:

NPA (编号计划区域代码)-允许范围:第一个数字为2-9,第二个和第三个数字为0-9 .当地区代码的第二位和第三位数字相同时,该代码被称为容易识别的代码(ERC)。ERCs指定特别服务;例如888用于免费服务.NANP没有分配以9作为第二位数字的区号。 NXX (中央办公室)-允许范围:第一个数字为2-9,第二个和第三个数字为0-9(但是,如果第二个数字也是"1“,则第三个数字不能为"1")。 xxxx (订户号码)-0-9每一个四位数.

如果要在开头省略+1,则可以使用以下方法匹配10位数字。他们唯一要阻止的是一个包含一些3位本地代码的数字,比如911611411等等。因此,为了完成这项工作,我们要确保在中央办公部分的第一个数字之后的2位数字不是带有负向展望的(?!11)

这种模式应该适用于大多数字符串。

代码语言:javascript
复制
$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";    
    }
}

输出

代码语言:javascript
复制
(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.
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18385827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档