# 北美电话号码的 Java 正则表达式

> 原文： [https://howtodoinjava.com/regex/java-regex-validate-and-format-north-american-phone-numbers/](https://howtodoinjava.com/regex/java-regex-validate-and-format-north-american-phone-numbers/)

在此正则表达式教程中，我们将学习验证用户输入的电话号码是否为特定格式（在此示例中为北美格式），如果号码正确，则将其重新格式化为标准格式以进行显示。 我测试了以下格式，包括`1234567890`、`123-456-7890`、`123.456.7890`、`123 456 7890`，`(123) 456 7890`以及所有此类组合。

## 使用正则表达式验证北美电话号码

> **正则表达式：`^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$`**

以上正则表达式可用于验证电话号码的所有格式，以检查它们是否为有效的北美电话号码。

```java
List phoneNumbers = new ArrayList();
phoneNumbers.add("1234567890");
phoneNumbers.add("123-456-7890");
phoneNumbers.add("123.456.7890");
phoneNumbers.add("123 456 7890");
phoneNumbers.add("(123) 456 7890");

//Invalid phone numbers
phoneNumbers.add("12345678");
phoneNumbers.add("12-12-111");

String regex = "^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$";

Pattern pattern = Pattern.compile(regex);

for(String email : phoneNumbers)
{
	Matcher matcher = pattern.matcher(email);
	System.out.println(email +" : "+ matcher.matches());
}

Output:

1234567890 : 		true
123-456-7890 : 		true
123.456.7890 : 		true
123 456 7890 : 		true
(123) 456 7890 : 	true

12345678 : 			false
12-12-111 : 		false

```

## 使用正则表达式格式化北美电话号码

> **正则表达式：`($1) $2-$3`**

使用上面的正则表达式来重新格式化在上述步骤中验证过的电话号码，以便以一致的方式重新格式化以存储/显示目的。

```java
List phoneNumbers = new ArrayList();
phoneNumbers.add("1234567890");
phoneNumbers.add("123-456-7890");
phoneNumbers.add("123.456.7890");
phoneNumbers.add("123 456 7890");
phoneNumbers.add("(123) 456 7890");

//Invalid phone numbers
phoneNumbers.add("12345678");
phoneNumbers.add("12-12-111");

String regex = "^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$";

Pattern pattern = Pattern.compile(regex);

for(String email : phoneNumbers)
{
	Matcher matcher = pattern.matcher(email);
	//System.out.println(email +" : "+ matcher.matches());
	//If phone number is correct then format it to (123)-456-7890
	if(matcher.matches())
	{
	   System.out.println(matcher.replaceFirst("($1) $2-$3"));
	}
}

Output:

(123) 456-7890
(123) 456-7890
(123) 456-7890
(123) 456-7890
(123) 456-7890

```

上面的正则表达式也可以在 Java 脚本中工作。 因此，下次需要它们时，请务必将它们放在方便的地方。

**祝您学习愉快！**