假设您的用户输入了多种格式的10位数电话号码,例如
xxxxxxxxxx,
xxx-xxx-xxxx,
(xxx)xxx-xxxx.
为此语言编写正则表达式。提示:您可能希望使用联合分隔不同的格式?
我想出了这个表达
\d{10} U \d{3}-\d{3}-\d{4} U (\d{3})\d{3}-\d{4}
是否有任何评论上述表达式是否正确?
答案 0 :(得分: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
答案 1 :(得分:0)
请参阅http://regex101.com/r/tK6mD4
(\d{10})|(\d{3}-\d{3}-\d{4})|(\(\d{3}\)\d{3}-\d{4})
使用|
代替“或”,没有空格,使用()
转义\
。
使用
进行测试(888)123-3456 - match
8881231234 - match
888-123-1234 - match
888-1234567 - no match
注意 - 此表达式完全匹配(并且仅)您要求的内容。 “所有有效电话号码”的良好正则表达方式完全不同 - 您可以谷歌搜索并找到大量答案。
答案 2 :(得分: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
这是专门针对美国电话号码的 - 因此也会考虑国家/地区前缀。