首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NANP电话号码的Regex,后7位不重复

NANP电话号码的Regex,后7位不重复
EN

Stack Overflow用户
提问于 2011-09-01 06:22:47
回答 2查看 2.3K关注 0票数 0

我必须在.NET中验证NANP格式的10位(美国)电话号码(不允许特殊字符),并检查以确保电话号码的最后7位不重复。到目前为止,我已经编写了以下正则表达式来验证NANP格式

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

我如何修改这个正则表达式,使其也支持不重复的后7位数?请注意,由于现有代码的限制,不能使用两个正则表达式。

编辑:我必须检查所有7位数字中的连续重复。例如,2062222222应被视为无效,而2062221234或2062117777应被视为有效。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-01 14:36:32

你是在说连续的重复数字,还是说所有的七个数字都必须是唯一的?例如:

代码语言:javascript
复制
2342497553  // consecutive duplicates
2345816245  // non-consecutive duplicates
2345816249  // no duplicates

此正则表达式过滤掉连续的重复项:

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

...while此命令不允许任何重复的数字:

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

在使用完前三位数字之后,先行查找尝试查找重复的字符,要么立即((?!.*(.)\1)),要么带有可选的中间字符((?!.*(.).*\1))。这是一个消极的先行预测,所以如果它成功了,整体匹配就会失败。

EDIT:它证明问题比我想象的要简单。要过滤出像2345555555这样的数字,其中最后七位数字相同,请使用以下命令:

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

重要的是要包括结束锚($),因为如果没有它,它将无法匹配有效的数字,如2345555556。或者,您可以告诉它恰好再查找捕获的数字中的6个:(?!(\d)\1{6})

票数 1
EN

Stack Overflow用户

发布于 2011-09-01 06:49:53

我很确定昨晚讨论的是非重复部分,普遍的共识是正则表达式不能直接处理非重复,你必须放入大量无法管理的替代情况。我不认为我真的看到了它的证明,但我很确定这是真的。归根结底,正则表达式没有内存。我建议您使用regexp来验证该格式,并通过单独的算法运行它以检查重复项。

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

https://stackoverflow.com/questions/7264184

复制
相关文章

相似问题

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