假设您有用户以多种格式输入 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}
对上述表达式是否正确解决问题有何评论?
假设您有用户以多种格式输入 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}
对上述表达式是否正确解决问题有何评论?
我可能会做这样的事情:
\(?\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
(\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
注意 - 此表达式完全(且仅)匹配您要求的内容。“所有有效的电话号码”的一个好的正则表达式是完全不同的——你可以用谷歌搜索,并会找到大量的答案。
来自 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
这专门针对美国电话号码 - 因此还考虑了国家/地区前缀。