正则表达式以匹配美国电话号码

时间:2009-10-13 11:56:03

标签: regex

正则表达式^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$匹配XXX-XXX-XXXXXXX-XXXX形式的字符串(我错过了哪些内容?)。

但它也不匹配(XXX) XXX-XXXX(XXX) XXX-XXX-XXXX(我需要它匹配)。

你能帮我解决一下这个问题吗? XXX-XXX-XXXXXXX-XXXX(XXX) XXX-XXXX(XXX) XXX-XXXX
没有使它与我不想要的其他字符串格式匹配?

5 个答案:

答案 0 :(得分:6)

您的规格有点令人困惑。你的最后两个案例看起来是一样的:
XXX-XXX-XXXX
XXX-XXXX
(XXX)XXX-XXXX
(XXX)XXX-XXXX

(看起来你正试图匹配一个电话号码,是吗?)  假设您的最后一个案例是“(XXX)XXX-XXXX”(区号和常规号之间没有空格,我假设是“?”意味着可选空格)那么您的RegExp几乎是正确的,只需在前面添加两个反斜杠区号代码括号,因此它们匹配为普通字符而不是特殊分组字符:

^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$

请注意,你的正则表达式可能没有正确通过,我注意到堆栈溢出从RE模式中删除了一个反斜杠,我必须输入一个双反斜杠“\\”才能得到一个反斜杠来在消息中

答案 1 :(得分:2)

试试这个:

(\(\d{3}\) )?(\d{3}-){1,2}(\d{4})

答案 2 :(得分:0)

您需要转义括号,如下所示:\(否则,它们不会匹配,而是会捕获。

答案 3 :(得分:0)

^(((\ d {3})?)|(\ d {3} - ))?\ d {3} - \ d {4} $ ^

这将有效。

答案 4 :(得分:-1)

我认为这就是你要找的东西,

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

它适用于以下模式 XXX-XXX-XXXX,XXX-XXXX,(XXX)XXX-XXXX