Regex to Validate International Phone Numbers

In this regex tutorial, we will learn to validate international phone numbers based on industry-standard notation specified by ITU-T E.123. The rules and conventions used to print international phone numbers vary significantly around the world, so it’s hard to provide meaningful validation for an international phone number unless …

In this regex tutorial, we will learn to validate international phone numbers based on industry-standard notation specified by ITU-T E.123.

The rules and conventions used to print international phone numbers vary significantly around the world, so it’s hard to provide meaningful validation for an international phone number unless you adopt a strict format. Fortunately, there is a simple, industry-standard notation specified by ITU-T E.123. This notation requires that international phone numbers include a leading plus sign (known as the international prefix symbol), and allows only spaces to separate groups of digits.

Also thanks to the international phone numbering plan (ITU-T E.164), phone numbers cannot contain more than 15 digits. The shortest international phone numbers in use contain seven digits.

1. Regex for Matching International Phone Numbers

Regex : ^\+(?:[0-9] ?){6,14}[0-9]$

^ # Assert position at the beginning of the string. \+ # Match a literal "+" character. (?: # Group but don't capture: [0-9] # Match a digit. \\s # Match a space character ? # between zero and one time. ) # End the noncapturing group. {6,14} # Repeat the group between 6 and 14 times. [0-9] # Match a digit. $ # Assert position at the end of the string.

The above regular expression can be used to validate international phone numbers based on ITU-T standards. Let’s look at one example.

List phoneNumbers = new ArrayList(); phoneNumbers.add("+1 1234567890123"); phoneNumbers.add("+12 123456789"); phoneNumbers.add("+123 123456"); String regex = "^\\+(?:[0-9] ?){6,14}[0-9]$"; Pattern pattern = Pattern.compile(regex); for(String email : phoneNumbers) { Matcher matcher = pattern.matcher(email); System.out.println(email +" : "+ matcher.matches()); }

The program output:

+1 1234567890123 : true +12 123456789 : true +123 123456 : true

2. Regex for International Phone Numbers in EPP format

This regular expression follows the international phone number notation specified by the Extensible Provisioning Protocol (EPP). EPP is a relatively recent protocol (finalized in 2004), designed for communication between domain name registries and registrars. It is used by a growing number of domain name registries, including .com, .info, .net, .org, and .us. The significance of this is that EPP-style international phone numbers are increasingly used and recognized, and therefore provide a good alternative format for storing (and validating) international phone numbers.

EPP-style phone numbers use the format +CCC.NNNNNNNNNNxEEEE, where C is the 1–3 digit country code, N is up to 14 digits, and E is the (optional) extension. The leading plus sign and the dot following the country code are required. The literal “x” character is required only if an extension is provided.

Regex : ^\+[0-9]{1,3}\.[0-9]{4,14}(?:x.+)?$

List phoneNumbers = new ArrayList(); phoneNumbers.add("+123.123456x4444"); phoneNumbers.add("+12.1234x11"); phoneNumbers.add("+1.123456789012x123456789"); String regex = "^\\+[0-9]{1,3}\\.[0-9]{4,14}(?:x.+)?$"; Pattern pattern = Pattern.compile(regex); for(String email : phoneNumbers) { Matcher matcher = pattern.matcher(email); System.out.println(email +" : "+ matcher.matches()); }

The program output:

+123.123456x4444 : true +12.1234x11 : true +1.123456789012x123456789 : true

Feel free to edit the above regex and play with it to match the more strict phone number formats, you have in your mind.

Happy Learning !!

Comments

Subscribe
1 Comment
Most Voted
Newest Oldest
Inline Feedbacks
View all comments

About Us

HowToDoInJava provides tutorials and how-to guides on Java and related technologies.

It also shares the best practices, algorithms & solutions and frequently asked interview questions.