$show=/label

How To Validate Phone Numbers in Java (Regular Expression + Google libphonenumber)

SHARE:

A quick guide to how to validate phone numbers in java for different countries such as the USA, IN. Example programs with Regular Expression and Google libphonenumber API.

1. Introduction


In this tutorial, We'll learn how to validate phone numbers in java. This is to validate mainly the USA and India country phone numbers but after seeing the example you can develop the validation rules for other countries.

This is a common requirement to verify mobile numbers as we do validation for email address validation but java does not have built-in capability to provide such methods. But, We can achieve this with the help of regular expression and google api with libphonenumber.

Let us jump into writing example programs.



2. Regular Expression


Regular expression implementation is a bit tricky because phone number has lots of formats with different extensions.

For example, here are some of the common ways of writing phone numbers for the USA.

1234567890
123-456-7890
123-456-7890 x1234
123-456-7890 ext1234
(123)-456-7890
123.456.7890
123 456 7890

India:

9123124123

Phone Number Validation with Regular Expression


package com.java.w3schools.blog.java.program.to.libphonenumber;

public class PhoneValidationRegularExpression {

 public static void main(String[] args) {

  System.out.println("Validation for 1234567890 : " + validatePhoneNumber("1234567890"));
  System.out.println("Validation for 1234 567 890 : " + validatePhoneNumber("1234 567 890")); 
  System.out.println("Validation for 123 456 7890 : " + validatePhoneNumber("123 456 7890"));
  System.out.println("Validation for 123-567-8905 : " + validatePhoneNumber("123-567-8905"));
  System.out.println("Validation for 9866767545 : " + validatePhoneNumber("9866767545"));
  System.out.println("Validation for 123-456-7890 ext9876 : " + validatePhoneNumber("123-456-7890 ext9876"));

 }

 private static boolean validatePhoneNumber(String phoneNumber) {
  // validate phone numbers of format "1234567890"
  if (phoneNumber.matches("\\d{10}"))
   return true;
  // validating phone number with -, . or spaces
  else if (phoneNumber.matches("\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}"))
   return true;
  // validating phone number with extension length from 3 to 5
  else if (phoneNumber.matches("\\d{3}-\\d{3}-\\d{4}\\s(x|(ext))\\d{3,5}"))
   return true;
  // validating phone number where area code is in braces ()
  else if (phoneNumber.matches("\\(\\d{3}\\)-\\d{3}-\\d{4}"))
   return true;
  // Validation for India numbers
  else if (phoneNumber.matches("\\d{4}[-\\.\\s]\\d{3}[-\\.\\s]\\d{3}"))
   return true;
  else if (phoneNumber.matches("\\(\\d{5}\\)-\\d{3}-\\d{3}"))
   return true;

  else if (phoneNumber.matches("\\(\\d{4}\\)-\\d{3}-\\d{3}"))
   return true;
  // return false if nothing matches the input
  else
   return false;

 }
}

Output:

Validation for 1234567890 : true
Validation for 1234 567 890 : true
Validation for 123 456 7890 : true
Validation for 123-567-8905 : true
Validation for 9866767545 : true
Validation for 123-456-7890 ext9876 : true

3. Google libphonenumber Example


If you go with the regex approach, you need to do lots of testing to cover all the corner cases. But, if we have some api that provides this functionality with proper testing that would be good to use in our application.

libphonenumber API is provided by Google as an opensource library that provides the functionalities such as parsing, formatting, validating and storing international phone numbers.

This API is optimized for running on smartphones and also used by the Android framework.

The main advantage of this API is that you can format or validate and parse any country or region mobile numbers.

Class PhoneNumberUtil is a utility for international phone numbers. Functionality includes formatting, parsing, and validation.

package com.java.w3schools.blog.java.program.to.libphonenumber;

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;

public class PhoneValidationWIthGooglelibphonenumberAPI {

 public static void main(String[] args) throws NumberParseException {

  PhoneNumberUtil numberUtil = PhoneNumberUtil.getInstance();

  PhoneNumber phoneNumber = numberUtil.parse("9866123456", "IN");

  boolean isValid = numberUtil.isValidNumber(phoneNumber);

  System.out.println("Checking given phone number is vaid : " + isValid);
 }

}

Output:

Checking given phone number is vaid : true

Another Example To Validate USA OR India Phone numbers:


Sample phone numbers

package com.java.w3schools.blog.java.program.to.libphonenumber;

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;

public class PhoneValidationWIthGooglelibphonenumberAPI {

 public static void main(String[] args) throws NumberParseException {

  System.out.println("USA phone number validations: ");
  String[] usPhoneNumbers = { "(541) 754-3010", "+1-541-754-3010", "1-541-754-3010", "001-541-754-3010",
    "191 541 754 3010" };
  validatePhoneNumber(usPhoneNumbers, "US");

  System.out.println("\nindia phone number validations: ");
  String[] indiaPhoneNumbers = { "+91 7503907302", "9702522865", "+91–8477812345", "+91 9999999999",
    "+91 9688 123 456", "+9688 123 456" };
  validatePhoneNumber(indiaPhoneNumbers, "IN");

 }

 private static void validatePhoneNumber(String[] phoneNumbers, String region) throws NumberParseException {

  PhoneNumberUtil numberUtil = PhoneNumberUtil.getInstance();

  for (String number : phoneNumbers) {

   PhoneNumber phoneNumber = numberUtil.parse(number, region);

   boolean isValid = numberUtil.isValidNumber(phoneNumber);

   if (isValid) {
    System.out.println(number + " is a valid number.");
   } else {
    System.out.println(number + " is a not valid number.");
   }

  }

 }
}

Output:

USA phone number validations: 
(541) 754-3010 is a valid number.
+1-541-754-3010 is a valid number.
1-541-754-3010 is a valid number.
001-541-754-3010 is a not valid number.
191 541 754 3010 is a not valid number.

india phone number validations: 
+91 7503907302 is a valid number.
9702522865 is a valid number.
+91–8477812345 is a valid number.
+91 9999999999 is a valid number.
+91 9688 123 456 is a valid number.
+9688 123 456 is a not valid number.

PhoneNumberUtil API

5. PhoneNumberType


This api supports all the below types of numbers.

FIXED_LINE  
FIXED_LINE_OR_MOBILE  
MOBILE  
PAGER  
PERSONAL_NUMBER  
PREMIUM_RATE  
SHARED_COST  
TOLL_FREE  
UAN  
UNKNOWN  
VOICEMAIL  
VOIP

PhoneNumberUtil.PhoneNumberType


6. Conclusion


In this article, We've seen how to validate phone numbers in java using regex and Google open-source api libphonenumber.

GitHub Code

Google API

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,31,ArrayList,16,Arrays,2,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,4,Collections,20,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,5,Core Java,71,Corona India,1,Create,2,CSS,1,Date,2,Date Time API,3,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,2,Fast,1,Files,9,Float,1,Font,1,For examples,1,For loop examples,1,For Loop in Java,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HTML,2,HttpClient,2,Immutable,1,Inner for loops,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,28,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,java 5 For loop,1,Java 8,47,Java 9,1,Java Design Patterns,1,Java Files,1,Java for loop,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,Nested for loop,1,Nested for loop examples,1,New Features,1,Operations,1,Optional,4,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Softwares,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Stream,2,Streams,11,String,48,String Programs,8,String Revese,1,Swing,1,System,1,Tags,1,Threads,7,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: How To Validate Phone Numbers in Java (Regular Expression + Google libphonenumber)
How To Validate Phone Numbers in Java (Regular Expression + Google libphonenumber)
A quick guide to how to validate phone numbers in java for different countries such as the USA, IN. Example programs with Regular Expression and Google libphonenumber API.
JavaProgramTo.com
https://www.javaprogramto.com/2020/04/java-phone-number-validation.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2020/04/java-phone-number-validation.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content