我必须编写一个正则表达式来验证以下格式的美国电话号码:
(123).123.1234 -- true
1234567890 -- true
(123)1231234 -- true
(123)-456-7890 -- true
(123) 123 1234 -- true
123 123 1234 -- true
(123). 456. 7890 -- true
(123)- 456- 7890 -- true.
我想出了这样的东西:
[\\(]?\\d{3}[\\)]?[-.]?[\\s]*\\d{3}[-.]?[\\s]*\\d{4}
不幸的是,根据我的正则表达式,以下值也有效:
123.123-1234
(123)-123.1234
123. 123- 1234
最佳答案
您可以使用以下正则表达式来匹配这些数字:
String rx = "[\\(]?\\d{3}[\\)]?([-.]?)\\s*\\d{3}\\1\\s*\\d{4}";
([-.]?)
构造是 capturing group捕获匹配的文本并将其存储在某个缓冲区中,然后我们可以使用 \\1
backreference 访问该文本之后。
请注意,如果您需要整个字符串匹配,请使用带有正则表达式的 String.matches()
方法。
关于java - 使用正则表达式验证美国电话号码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261327/