java - 使用正则表达式验证美国电话号码格式

标签 java regex string validation

我必须编写一个正则表达式来验证以下格式的美国电话号码:

(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}";

参见IDEONE demo

([-.]?) 构造是 capturing group捕获匹配的文本并将其存储在某个缓冲区中,然后我们可以使用 \\1 backreference 访问该文本之后。

请注意,如果您需要整个字符串匹配,请使用带有正则表达式的 String.matches() 方法。

关于java - 使用正则表达式验证美国电话号码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261327/

相关文章:

java - 如何在 Jsoup 中发送复选框数据

java - 如何将带有空格的 double 字字符串更改为我可以使用的仅由 double 字组成的数组

java - quartz - ClassCastException

java - Kotlin中如何设计减少冗余类?

javascript - 如何识别和存储 JavaScript 中字符串中存在的变量中的数字?

python Regex 返回匹配的字符串,但也会在无法匹配的地方返回空白

php - 如何使 PHP 正则表达式选项组不急切?

c# - 这段从 Java 到 C# 的代码片段正确吗?

javascript - 如何使用 JavaScript 将字符串中的双引号替换为转义字符双引号?

java - String.split() 无法正常运行,或者...根本没有?