-1

假设您有用户以多种格式输入 10 位电话号码,例如

xxxxxxxxxx, 
xxx-xxx-xxxx, 
(xxx)xxx-xxxx. 

为这种语言写一个正则表达式。提示:您可能想用 union 分隔不同的格式?

我想出了这个表达

\d{10} U \d{3}-\d{3}-\d{4} U (\d{3})\d{3}-\d{4}

对上述表达式是否正确解决问题有何评论?

4

3 回答 3

0

我可能会做这样的事情:

\(?\b[0-9]{3}\)?[-/\s]?[0-9]{3}[-. ]?[0-9]{4}\b

这将捕获所有这些格式:

XXXXXXXXXX
XXX-XXX-XXXX
(XXX) XXX-XXXX
(XXX)XXX-XXXX
(XXX) XXX XXXX
XXX/XXX-XXXX
于 2013-11-04T21:20:08.073 回答
0

http://regex101.com/r/tK6mD4

(\d{10})|(\d{3}-\d{3}-\d{4})|(\(\d{3}\)\d{3}-\d{4})

使用|“OR”,没有空格,转义()with \

经测试

(888)123-3456     - match
8881231234        - match
888-123-1234      - match
888-1234567       - no match

注意 - 此表达式完全(且仅)匹配您要求的内容。“所有有效的电话号码”的一个好的正则表达式是完全不同的——你可以用谷歌搜索,并会找到大量的答案。

于 2013-11-04T21:24:31.827 回答
0

来自 http://net.tutsplus.com/tutorials/php/advanced-regular-expression-tips-and-techniques/

/^(1[-\s.])?(\()?\d{3}(?(2)\))[-\s.]?\d{3}[-\s.]?\d{4}$/


    (1[-\s.])?  # optional '1-', '1.' or '1' 
    ( \( )?     # optional opening parenthesis 
    \d{3}       # the area code 
    (?(2) \) )  # if there was opening parenthesis, close it 
    [-\s.]?     # followed by '-' or '.' or space 
    \d{3}       # first 3 digits 
    [-\s.]?     # followed by '-' or '.' or space 
    \d{4}       # last 4 digits 

这专门针对美国电话号码 - 因此还考虑了国家/地区前缀。

于 2013-11-04T21:25:44.473 回答