The following java program checks for the validity of US and Canada phone number formats using regular expression. The regular expression used here can handle the following rules:
- The starting character may be ‘+’ but is optional
- If the country code is used, it can be either 0 or 1 and is optional
- Various codes (country, area) might be separated with ‘-’ or ‘.’ but is optional
- Area code should not start with 0 but may be optionally enclosed in round brackets
package com.kushal.tools; /** * @author Kushal Paudyal * Last Modified on 05/11/2011 * Java Regular Expression to Validate US and Canada phone numbers. */ import java.util.regex.Pattern; public class RegexUSAndCandaPhoneNumberValidator{ /** * REGEX IS: ^[+]?[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$ * Escape Sequences are added in the following String for back slash (\) */ static String phoneValidationUSCandaRegex = "^[+]?[01]?[- .]?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})[- .]?\\d{3}[- .]?\\d{4}$"; /** * This method compares the parameter string against the US Phone number * regex and returns true if the pattern is matched - meaning the phone * number is valid. * * The regular expression used here can handle the following rules: * The starting character may be '+' but is optional * If the country code is used, it can be either 0 or 1 and is optional * Various codes (country, area) might be separated with '-' or '.' but is optional * Area code should not start with 0 but may be optionally enclosed in round brackets * */ public static boolean isAValidUSPhoneNumber(String str) { return Pattern.matches(phoneValidationUSCandaRegex, str); } public static void main (String [] args ) { String [] phoneNumbersToValidate={"2-309-778-4234", "1-309-778-4423", "309-778-4235", "3097784234", "309.778.4234", "01-309-798-4234", "001-309-798-4234", "0-309-798-4234", "+1-309-798-4235", "1-3097980577", "1-309.7980578", "1-(309)-788-8978"}; for(int index=0;index<phoneNumbersToValidate.length;index++) { String number=phoneNumbersToValidate[index]; boolean isValid=isAValidUSPhoneNumber(phoneNumbersToValidate[index]); System.out.println(number+" : "+(isValid?"Valid":"Invalid")); } } }
Originally posted 2011-05-17 20:34:21.