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

新手上路,请多包涵

在下面的代码中,我试图让输出成为电话号码的不同格式,以及它是否有效。除了第 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");
                }
             }
      }
  }

原文由 Ducky 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 761
2 个回答

基本上,您需要采用 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

原文由 Patrick Parker 发布,翻译遵循 CC BY-SA 3.0 许可协议

考虑到有关电话号码格式的这些事实:-

  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/

原文由 Ashish Lahoti 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题