首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配电话模式逻辑的Regex

匹配电话模式逻辑的Regex
EN

Stack Overflow用户
提问于 2019-05-31 19:59:08
回答 2查看 89关注 0票数 3

我试图使用以下逻辑创建一个regex字符串来匹配电话号码:

1) NPA (区号)为3位,第1位为2-9,第2位和第3位为0-9。

2)对于NXX ( NPA之后的下一个3位数字),与NPA相同的规则。此外,如果第二位数字为“1”(为公共服务保留),则第三位数字不能为“1”。

3)对于XXXX (NXX之后的数字-下4位数字),4位数字中的每一位都为0-9位。

我使用以下字符串完成了步骤1和步骤3以及步骤2的一部分:

代码语言:javascript
复制
^\(?([2-9]{1})\)?([0-9]{2})?[-.*]?([2-9]{1})\)?([0-9]{2})?[-.*]?([0-9]{4})$

但我坚持要把这里所述的逻辑结合起来:

对于NXX (exchange - NPA之后的下3位数字),与NPA相同的规则。此外,如果第二位数字为“1”(为公共服务保留),则第三位数字不能为“1”。

如果有人能帮我照亮这一点,我们将不胜感激。

错误是我希望我的正则表达式不匹配的,而真是我希望它继续匹配的东西。它目前匹配这两组。

假:4807119320 4805119439 4809114739

真:4805218482 4805123848 4809128327 4809418482

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-31 20:51:03

如果在第二部分中,如果第三位数为1,则第二位数不能为1,则可以使用负前瞻性(?!11)断言右边的值不是11。

如果将其添加到您的模式中,它将看起来如下:

代码语言:javascript
复制
^\(?([2-9])\)?([0-9]{2})?[-.*]?([2-9])\)?((?!11)[0-9]{2})?[-.*]?([0-9]{4})$
                                          ^^^^^^ 

Regex演示

注意到,由于问号(如\(?\)? ),许多部件都是可选的;对于第二个结束括号,缺少一个开头括号,因此这也将与(2)33-2)21-2222匹配。

如果第二部分的开头和结尾括号应该与第一部分相同,它可能如下所示:

代码语言:javascript
复制
^\(?([2-9])\)?([0-9]{2})?[-.*]?\(?([2-9])\)?((?!11)[0-9]{2})?[-.*]?([0-9]{4})$
                               ^^^ 

如果第一个字符类中的匹配项应该与第二个字符类中的匹配项相同,则还可以使用另一个捕获组([-.*]?)和反向引用\3,这样(2)33-(2)212222就不会匹配:

Regex演示

票数 1
EN

Stack Overflow用户

发布于 2019-06-01 01:09:09

使用

^(?(2-9))?(0-9{2})?-._?(2-9))?((?!11)0-9{2})?-._?(0-9{4})$

解决了我的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56401070

复制
相关文章

相似问题

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