首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript regex :用于美国电话号码

javascript regex :用于美国电话号码
EN

Stack Overflow用户
提问于 2015-08-28 09:42:38
回答 4查看 6.3K关注 0票数 3

嗨,我正在尝试编写正则表达式,但面临一些问题。有人能帮我写一本吗。

条件:

·不允许所有10位都为0。

·区号(前3位)不能是相同的数字,

·第一位和第四位不能是0或1。

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

示例格式:(234) 567-7890

上面的问题与其他问题不同,因为它更侧重于使用正则表达式满足的特定条件。

EN

回答 4

Stack Overflow用户

发布于 2015-08-28 10:15:43

因此,首先,我应该指出,要求美国格式的电话号码是相当严格的;国际号码可以有非常不同的规则。也就是说,这个正则表达式应该能满足您的需求:

代码语言:javascript
复制
/(?:^|\D)\(([2-9])(?:\d(?!\1)\d|(?!\1)\d\d)\)\s*[2-9]\d{2}-\d{4}/

首先,为了防止匹配以有效电话号码结尾但前面有多余垃圾的内容,我们匹配字符串的开头(^)或非数字(\D)。然后是区号(\()的左括号。

然后我们匹配区号的第一个数字[2-9]

然后,我们要么匹配任何数字(\d),然后匹配除第一个数字((?!\1)\d)之外的任何数字,要么反过来匹配((?!\1)\d\d)。这样可以避免区号是三个相同的数字。

然后我们关闭括号(\)),允许(但不要求)前缀的第一个数字前面有空格(\s*) (同样是[2-9]),后面是任意两个数字(\d{2})、一个连字符和任意四个数字(\d{4})。

票数 4
EN

Stack Overflow用户

发布于 2015-08-28 10:30:30

让我们分成几部分,你有三个条件:

  1. 9位不允许为0
  2. 区号(前3位)不能是同一位,
  3. 第一位和第四位不能是0或1。

如果考虑条件3,则条件1是多余的;不考虑条件2的简单正则表达式是:

代码语言:javascript
复制
/^\([2-9]\d\d\) [2-9]\d\d-\d{4}$/

假设您需要括号和空格- (555) 555-5555

解释:

  • \d匹配任何数字
  • 2-9匹配2到9之间的任何字符
  • 空格和破折号是文字-匹配空格和破折号
  • {4}是限定符-将匹配4个数字在这种情况下

H118(和)是转义文字-将匹配(和) and

现在,如果我们想在表达式中考虑条件2,我们使用

  • a negative lookahead ?!
  • a capturing () and
  • a back reference \1.

如果你想完全理解它们,请阅读一些正则表达式参考。完整的表达式是:

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

Stack Overflow用户

发布于 2015-08-28 09:58:58

代码语言:javascript
复制
/^\D([2-9])(?!\1\1)\d{2}\D\s+[2-9]\d{2}\s+\W\s+\d{4}$/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32262079

复制
相关文章

相似问题

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