2012-07-09 65 views
0

我要验证美国的电话号码,这是我到目前为止有:正则表达式匹配一个美国电话模式

var numberRegex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/ 

我这个问题是这使得单支架。

这将允许通过一个没有像这样关闭的左括号:(111-121-1212

有没有人有一个正则表达式脚本,将匹配美国电话号码和帐户的括号?

+1

而不是抛出一个错误修复它 – epascarello 2012-07-09 16:26:16

+0

它不会引发错误。它只是验证一个错误的输入 – 2012-07-09 16:27:19

+0

@FaizanAli epascarello建议你简单地使用代码添加缺少的“)”而不是停止提交。不是我同意,只是想澄清。 – dqhendricks 2012-07-09 16:37:02

回答

2

使用替代品(|):

(?: 
\(([0-9]{3})\) 
    | 
([0-9]{3}) 
) 

形成的再样子:

var numberRegex = /^(?:\(([0-9]{3})\)|([0-9]{3}))[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/ 
+0

非常感谢!救了我一个工作! – 2012-07-09 16:31:04

+0

@FaizanAli:我很高兴能帮助你的男人! – 2012-07-09 16:32:13

-1

我会反对这项建议。验证电话号码的唯一方法是尝试打电话,看看是谁接电话。电话号码在语法上可能看起来正确,但它仍然可能在语义上是错误的(即假电话号码)。

您可以做的最好的方法是给用户一个警告,说明电话号码“看起来不正确”,但仍然接受任何输入。

+0

这是一个公平的观点,但是想要检查数字的语法和语法是合理的,而不必确定某人可能实际接听电话。 (顺便说一句,我没有倒下它)。 – Utkanos 2012-07-09 16:29:51

+1

不允许像“1234”这样的电话号码我肯定不会伤害成功率。除此之外,这不能回答这个问题,并且更适合于笔记部分。 – dqhendricks 2012-07-09 16:31:35

+0

这就是为什么我说“显示警告,但允许所有输入”。我们在这里说的是用户友好性,这就是为什么银行账号建立在平价的原因,但你可能会在电话号码字段中意外地输入你的地址(它发生!)。我很好奇为什么这个赢得了一个downvote,随时发表评论匿名懦夫。 – Halcyon 2012-07-09 16:35:51