正则表达式验证美国电话号码?

Pri*_*iya 33 javascript regex

可能重复:
用于电话号码验证的全面正则表达式
使用JavaScript验证电话号码

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

其他一切都无效.

我想出了类似的东西

 ^\(?([0-9]{3}\)?[-]([0-9]{3})[-]([0-9]{4})$
Run Code Online (Sandbox Code Playgroud)

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

这是不对的.

rua*_*akh 57

匹配两者的最简单方法

^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$
Run Code Online (Sandbox Code Playgroud)

^[0-9]{3}-[0-9]{3}-[0-9]{4}$
Run Code Online (Sandbox Code Playgroud)

是使用alternation((...|...)):将它们指定为两个主要分开的选项:

^(\([0-9]{3}\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$
Run Code Online (Sandbox Code Playgroud)

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

^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$
Run Code Online (Sandbox Code Playgroud)

(尽管最好明确说明您希望电话号码所在的格式.)

  • @HaBo:正则表达式无法检测*有效*电话号码,只能*有效格式化*电话号码.也就是说,没有美国地区代码以"0"或"1"开头,所以如果你愿意,可以将初始的"[0-9] {3}"更改为"[2-9] [0-9] [ 0-9]`. (16认同)
  • @joaquin:你这里犯了一个错误!区号的3位数字中没有一个能够包含0或1,这意味着所有洛杉矶和所有纽约市都将被拒绝!(310和212) (6认同)
  • @HaBo:我们为什么要避免这种情况? (4认同)
  • 因为它不是有效的电话号码. (4认同)