【问题标题】:Regular expression to validate US phone numbers? [duplicate]验证美国电话号码的正则表达式? [复制]
【发布时间】:2012-04-04 07:06:26
【问题描述】:

可能重复:
A comprehensive regex for phone number validation
Validate phone number with JavaScript

我正在尝试编写一个正则表达式来验证美国电话号码的格式 (123)123-1234 -- 对 123-123-1234 -- 是的

其他所有内容均无效。

我想出了类似的东西

 ^\(?([0-9]{3}\)?[-]([0-9]{3})[-]([0-9]{4})$

但这验证了, 123)-123-1234 (123-123-1234

这是不对的。

【问题讨论】:

  • 我认为让人们以任何他们想要的方式输入他们的电话号码要友好得多。只需去掉非数字并坚持在此之后留下 10 个数字。
  • 这可能是重复的,但请在标记帖子之前链接到以前的答案。

标签: javascript regex


【解决方案1】:

同时匹配两者的最简单方法

^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$

^[0-9]{3}-[0-9]{3}-[0-9]{4}$

是使用 alternation ((...|...)):将它们指定为两个大部分独立的选项:

^(\([0-9]{3}\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$

顺便说一句,当美国人把区号放在括号里时,我们实际上是在后面加了一个空格;例如,我会写(123) 123-1234,而不是(123)123-1234。所以你可能想写:

^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$

(尽管最好明确说明您希望电话号码采用的格式。)

【讨论】:

  • 上述表达式为 (000) 000-0000 提供了成功,我们如何避免这种情况?
  • @HaBo:我们为什么要避免这种情况?
  • 因为它不是有效的电话号码。
  • @HaBo:正则表达式无法检测有效个电话号码,只能检测格式有效个电话号码。也就是说,没有美国区号以01 开头,因此如果您愿意,可以将初始的[0-9]{3} 更改为[2-9][0-9][0-9]
  • @joaquin:你在这里犯了一个错误!区号的 3 位数字都不能包含 0 或 1,这意味着所有 LA 和所有 NYC 都将被拒绝! (310 和 212)
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
相关资源
最近更新 更多