E.164的正则表达式无效

时间:2017-07-29 14:27:50

标签: java regex

我使用以下代码:

    Pattern p = Pattern.compile("^\\+?[1-9]\\d{1,14}$"); 
    stringNumber=stringNumber.replace(" ","");
    Matcher m = p.matcher(stringNumber);


    if (!m.matches()) 
    {
    [...]
    }

应该正确检测E.164格式的数字的模式并不像我认为的那样有效,因为它可以作为E.164电话号码有效,一个数字在格式为XXXXXXXXX,X为0到9之间的所有数字。尽管我看到模式但我不明白为什么。

限制较少的模式" ^ \ +?\ d {10,14} $"确实有效,因为它检测到许多XXXXXXXXX不适合该格式。

也许最后一个模式足以满足我的应用目的,但我想使用第一个模式(可以确定电话号码在每种情况下都是E.164格式)只是为了获得更广泛的即使这些可能性很少,也会有各种可能性。

第一种模式可能导致意外行为的原因是什么?

1 个答案:

答案 0 :(得分:4)

要使数字前面有+,您的正则表达式应为^\\+[1-9]\\d{1,14}$。请注意删除?,这意味着+是可选的。

此外,第二个模式与输入不匹配的原因不是因为+,而是因为第二个模式至少需要一个10位数,而你的例子是9位数。