用于验证电话号码的Java正则表达式

时间:2017-02-08 04:11:00

标签: java regex

在下面的代码中,我试图将输出设置为电话号码的不同格式,如果它有效或无效。我想出了一切,但第11行的Java正则表达式代码是字符串模式。

 import java.util.regex.*;

  public class MatchPhoneNumbers {
   public static void main(String[] args) {           
     String[] testStrings = {               
               /* Following are valid phone number examples */             
              "(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
              /* Following are invalid phone numbers */ 
              "(1234567890)","123)4567890", "12345678901", "(1)234567890",
              "(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};

             // TODO: Modify the following line. Use your regular expression here
              String pattern = "^/d(?:-/d{3}){3}/d$";    
             // current pattern recognizes any string of digits           
             // Apply regular expression to each test string           
             for(String inputString : testStrings) {
                System.out.print(inputString + ": "); 
                if (inputString.matches(pattern)) {     
                    System.out.println("Valid"); 
                } else {     
                    System.out.println("Invalid"); 
                }
             }
      }
  }

5 个答案:

答案 0 :(得分:9)

基本上,你需要采用3或4种不同的模式,并将它们与“|”结合起来:

String pattern = "\\d{10}|(?:\\d{3}-){2}\\d{4}|\\(\\d{3}\\)\\d{3}-?\\d{4}";
  • \d{10}符合1234567890
  • (?:\d{3}-){2}\d{4}匹配123-456-7890
  • \(\d{3}\)\d{3}-?\d{4}匹配(123)456-7890或(123)4567890

答案 1 :(得分:2)

你需要的正则表达式是:

String regEx = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$";

正则表达式解释:

^\\(? - 可以选择"("

(\\d{3}) - 后跟3位

\\)? - 可以选择")"

[- ]? - 可以选择" - "在前3个数字之后或在可选之后)字符

(\\d{3}) - 后跟3位数。

[- ]? - 可能有另一个选项" - "数字后面的数字

(\\d{4})$ - 以四位数结尾

答案 2 :(得分:1)

国际电话号码正则表达式

String str=  "^\\s?((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?\\s?";


 if (Pattern.compile(str).matcher(" +33 - 123 456 789 ").matches()) {
        System.out.println("yes");
    } else {
        System.out.println("no");
    } 

答案 3 :(得分:1)

考虑以下有关电话号码格式的事实:-

  1. 国家/地区代码前缀以“ +”开头,并且具有1到3位数字
  2. 号码的最后一部分(也称为订户号码)是所有号码中的4位数字
  3. 大多数国家/地区(不包括国家/地区代码)后都有10位数字的电话号码。通常的观察结果是,所有国家/地区的电话号码在排除国家/地区代码后都介于8到11位之间。
String allCountryRegex = "^(\\+\\d{1,3}( )?)?((\\(\\d{1,3}\\))|\\d{1,3})[- .]?\\d{3,4}[- .]?\\d{4}$";

让我们打破正则表达式并了解

  • ^表达式的开始
  • (\\+\\d{1,3}( )?)?是1到3位数字之间的国家/地区代码(可选),以'+'开头,后跟空格或无空格。
  • ((\\(\\d{1,3}\\))|\\d{1,3}是1到3位的必填组,带或不带括号,后接连字符,空格或不带空格。
  • \\d{3,4}[- .]?是3或4位数字的必填组,后跟连字符,空格或无空格
  • \\d{4}是最后4位数字的必填组
  • $表达式的结尾

此正则表达式模式与大多数国家/地区的电话号码格式匹配,包括:-

        String Afghanistan      = "+93 30 539-0605";
        String Australia        = "+61 2 1255-3456";
        String China            = "+86 (20) 1255-3456";
        String Germany          = "+49 351 125-3456";
        String India            = "+91 9876543210";
        String Indonesia        = "+62 21 6539-0605";
        String Iran             = "+98 (515) 539-0605";
        String Italy            = "+39 06 5398-0605";
        String NewZealand       = "+64 3 539-0605";
        String Philippines      = "+63 35 539-0605";
        String Singapore        = "+65 6396 0605";
        String Thailand         = "+66 2 123 4567";
        String UK               = "+44 141 222-3344";
        String USA              = "+1 (212) 555-3456";
        String Vietnam          = "+84 35 539-0605";

来源:https://codingnconcepts.com/java/java-regex-for-phone-number/

答案 4 :(得分:0)

在括号三位数(带有可选的破折号)中为三位数创建非捕获组。然后你需要三个数字(另一个可选的破折号),然后是四个数字。就像,(?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}。你可以使用Pattern。总之喜欢,

String[] testStrings = {
        /* Following are valid phone number examples */         
        "(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
        /* Following are invalid phone numbers */
        "(1234567890)","123)4567890", "12345678901", "(1)234567890",
        "(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};

Pattern p = Pattern.compile("(?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}");
for (String str : testStrings) {
    if (p.matcher(str).matches()) {
        System.out.printf("%s is valid%n", str);
    } else {
        System.out.printf("%s is not valid%n", str);    
    }
}