Java Regex for North American Phone Numbers

In this regex tutorial, we will learn to validate user entered phone numbers for a specific format (in this example numbers are formatted in north American format) and if numbers are correct then reformat them to a standard format for display. I have tested formats including 1234567890, 123-456-7890, 123.456.7890, 123 456 7890, (123) 456 7890, and all such combinations.

Using Regex to Validate North American Phone Numbers

Regex : ^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$

Above regular expression can be used to validate all formats of phone numbers to check if they are valid north American phone numbers.

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

Using Regex to format North American Phone Numbers

Regex : ($1) $2-$3

Use above regex to reformat phone numbers validated in above step to reformat in a consistent way to store/display purpose.

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

Above regex will work in java-script as well. So keep these regex handy when you need them next time.

Happy Learning !!

Was this post helpful?

Join 7000+ Awesome Developers

Get the latest updates from industry, awesome resources, blog updates and much more.

* We do not spam !!

2 thoughts on “Java Regex for North American Phone Numbers”

Leave a Comment

HowToDoInJava

A blog about Java and related technologies, the best practices, algorithms, and interview questions.