首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex检查包含括号、加号字符和空格的电话号码

Regex检查包含括号、加号字符和空格的电话号码
EN

Stack Overflow用户
提问于 2015-02-18 16:47:28
回答 2查看 2.6K关注 0票数 1

我试图写一个正则表达式来检查电话号码输入的有效性。有几条规则:

  1. 第一个字符应该是'+‘或'(’)或数字
  2. 可以有无限的空格字符
  3. 可以有8-11位数字总计

我想出了这个:

代码语言:javascript
运行
复制
^(\+|\()?(\)?|\ *|\d{8,11})$

问题是,这只匹配一行中的8-11位数字,但是数字可以在任何地方,只有它们的总数应该是8-11。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 16:56:31

我想您想要实现这种格式,但不需要破折号?此外,如果要解析http://en.wikipedia.org/wiki/North_American_Numbering_Plan,还有更严格的规则。请更新您的问题,并更具体。

此正则表达式可用于将所有8-11数字与前面的加号相匹配。

代码语言:javascript
运行
复制
^\+?( *\d){8,11} *$

有趣的部分是( *\d){8,11} *。括号之间的每个组匹配无限数量的空格(可以是零,后面是一个数字)。因此,总的来说,您有811数字,中间的空格是无限制的。您还需要将*放在末尾,以处理跟踪空间。

如果您想要允许括号,那么这个问题就更复杂了,因为括号也使用了一些数字。如果数字的总数固定为3),您可以将其写成

代码语言:javascript
运行
复制
^\(( *\d){3} *\)( *\d){5,8} *$

现在您可以泛化此方法并生成:

代码语言:javascript
运行
复制
^\(( *\d){1} *\)( *\d){7,10} *$
^\(( *\d){2} *\)( *\d){6,9} *$
^\(( *\d){3} *\)( *\d){5,8} *$
^\(( *\d){4} *\)( *\d){4,7} *$
^\(( *\d){5} *\)( *\d){3,6} *$
^\(( *\d){6} *\)( *\d){2,5} *$
^\(( *\d){7} *\)( *\d){1,4} *$
^\(( *\d){8} *\)( *\d){0,3} *$
^\(( *\d){9} *\)( *\d){0,2} *$
^\(( *\d){10} *\)( *\d){0,1} *$
^\(( *\d){11} *\) *$

现在只是把它们结合起来的问题:

代码语言:javascript
运行
复制
^(\+?( *\d){8,11} *)|
 \(( *\d){1} *\)( *\d){7,10} *|
 \(( *\d){2} *\)( *\d){6,9} *|
 \(( *\d){3} *\)( *\d){5,8} *|
 \(( *\d){4} *\)( *\d){4,7} *|
 \(( *\d){5} *\)( *\d){3,6} *|
 \(( *\d){6} *\)( *\d){2,5} *|
 \(( *\d){7} *\)( *\d){1,4} *|
 \(( *\d){8} *\)( *\d){0,3} *|
 \(( *\d){9} *\)( *\d){0,2} *|
 \(( *\d){10} *\)( *\d){0,1} *|
 \(( *\d){11} *\) *$

但我认为@DaveKirby制作了一个有效点。这些规定在不同的地区和时间上有很大的不同(谁说我们会在20年内以同样的方式写电话号码?)你最好别想抓住他们。

票数 2
EN

Stack Overflow用户

发布于 2015-02-18 16:53:14

电话号码验证的综合判据复本

当涉及到支持国际电话号码时,这个问题相当复杂,因为规则可能因国而异,或者在巴西这样的一些(大国)国家,规则可能因移动电话而异。

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

https://stackoverflow.com/questions/28589060

复制
相关文章

相似问题

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