【问题标题】:Optional in java- regex for mobile number [duplicate]java-手机号码的正则表达式中的可选[重复]
【发布时间】:2019-06-25 03:48:00
【问题描述】:

我正在学习 Java 正则表达式,并在下面的程序中为我期待的 list[4] 项目 "Its a valid number : +11234562222" 但打印为无效。我已经做了 - 在正则表达式 (\\+\\d{1,2}-?) 中是可选的。谁能指出这段代码中缺少什么?

电流输出

> Its a valid number : 123-456-2222
Its a valid number : +1-123-456-2222
Its a valid number : 1234562222
Its a invalid number : 12345622226
Its a invalid number : +11234562222

预期输出

> Its a valid number : 123-456-2222
Its a valid number : +1-123-456-2222
Its a valid number : 1234562222
Its a invalid number : 12345622226
Its a valid number : +11234562222

public static void vali_mobile_num(){

String mob_pat = "^(\\+\\d{1,2}-?)?+(\\d{3}-?){2}+\\d{4}$";
List list = new ArrayList();

list.add( "123-456-2222");
list.add("+1-123-456-2222");
list.add("1234562222");
list.add("12345622226");
list.add("+11234562222");

Pattern p = Pattern.compile(mob_pat);

list.forEach(x -> {
    Matcher m = p.matcher(x.toString());
    if(m.find()){
        System.out.println("Its a valid number : "+m.group());
    }
    else
        System.out.println("Its a invalid number : "+ x);   

});

}

【问题讨论】:

  • 看看你的表达式:第一个可选组将匹配+11。接下来,您有 2 组 3 位数字,后面可能跟一个减号字符。所以这些将匹配234562。最后,您期望一组 4 位数字,但字符串仅剩下 222。为什么1234562222 匹配?因为第一个包含\+ 的可选组不匹配,因此留下1234562222 供其他组匹配。
  • 你应该遵守 Java 命名约定:方法名是用驼峰命名的,这意味着没有下划线。例如。 vali_mobile_num 应该是 validateMobileNum

标签: java regex


【解决方案1】:

你的正则表达式几乎没问题,只是你有一个额外的+ 我不明白为什么。只需将其删除即可。

^(\\+\\d{1,2}-?)?+(\\d{3}-?){2}+\\d{4}$
                 ^ is not needed

试试这个 Java 代码,

List<String> list = Arrays.asList("123-456-2222","+1-123-456-2222","1234562222","12345622226","+11234562222");
Pattern p = Pattern.compile("^(\\+\\d{1,2}-?)?(\\d{3}-?){2}+\\d{4}$");

list.forEach(x -> {
    Matcher m = p.matcher(x);
    if(m.matches()) {
        System.out.println(x + " is Valid");
    } else {
        System.out.println(x + " is Invalid");
    }
});

打印,

123-456-2222 is Valid
+1-123-456-2222 is Valid
1234562222 is Valid
12345622226 is Invalid
+11234562222 is Valid

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多