E.164的正则表达式无法正常工作

use*_*180 6 java regex

我正在使用以下代码:

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


    if (!m.matches()) 
    {
    [...]
    }
Run Code Online (Sandbox Code Playgroud)

并且模式,它应该正确检测E.164格式的数字,不能正常工作,因为它提供有效的E.164电话号码,格式为XXXXXXXXX的数字,是X之间的数字0和9.尽管我看到模式,但我无法理解为什么.

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

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

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

tim*_*ima 4

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

另外,第二个模式与输入不匹配的原因不是因为,+而是因为第二个模式至少需要 10 位数字,而您的示例是 9 位数字。