używam następujący kod:Regex wyrażenie E.164 nie działa
Pattern p = Pattern.compile("^\\+?[1-9]\\d{1,14}$");
stringNumber=stringNumber.replace(" ","");
Matcher m = p.matcher(stringNumber);
if (!m.matches())
{
[...]
}
i wzór, który ma prawidłowo wykryć numerów w formacie E.164, nie działa tak myślę, Powinien, jako że nadaje jako numer telefonu E.164, numer w formacie XXXXXXXXX, będący X-cyfrą od 0 do 9. I chociaż patrzę na wzór, nie mogę zrozumieć, dlaczego.
Mniej restrykcyjny wzór "^ \ +? \ D {10,14} $" działa, ponieważ wykrył, że liczba XXXXXXXXX nie pasuje do formatu.
Być może ostatni wzór jest wystarczający do moich celów aplikacji, ale chciałbym użyć pierwszego (który może określić, że numer telefonu jest w formacie E.164 w każdym przypadku) tylko po to, aby uzyskać szerszy zakres możliwości, nawet jeśli te możliwości są rzadkie.
Co może być przyczyną nieoczekiwanego zachowania przy pierwszym wzorcu?
Czy istnieje jakiś powód, dla którego XXXXXXXXX nie może zostać zaakceptowany przez twój wzór? – TomekK
@TomekkK, tylko z + na wzorze Myślę, że nie powinien on pasować do tego wzorca, i mimo to tak się dzieje. – user2638180
chcesz mieć '+' z przodu wymagane? – tima