Регулярно проверять наличие знака плюс и цифр - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу проверить, что строка содержит "+" и только цифры:

public boolean checkPhoneNumberIsValid(String arg) {
    return Pattern.compile("\\+[0-9]").matcher(arg).find();
}

Когда я пытаюсь "xxx", это корректно завершается неудачей.Когда я пытаюсь "+3531234567", он проходит правильно.Но когда я пытаюсь "+ 35312ccc34567" неправильно проходит.Почему это?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Причина, по которой он пропускается неправильно, состоит в том, что вы соответствуете только одной цифре после +.Вам нужно сопоставить всю строку до конца и проверить, есть ли в ней только цифры.Попробуйте следующее регулярное выражение:

\\+[0-9]+$

или

\\+\d+$

+ в конце регулярного выражения означает: Match one or more occurrence of [0-9].

Смотрите это: https://regex101.com/r/0ufZPi/1

+3245edsfv    //fail
+86569653386  //pass
+xxxx         //fail
+234fsvfb7890 //fail
0 голосов
/ 03 декабря 2018

Я думаю, это потому, что метод find находит единственное совпадение подстроки в вашем аргументе.Я бы порекомендовал методы matches, которые проверяют соответствие полной строки:

public boolean checkPhoneNumberIsValid(String arg) {
    return Pattern.matches("\\+[0-9]+", arg);
}

[0-9]+ означает одну или несколько цифр.Вы пропустили +, поэтому вы только сопоставляли одну цифру в начале строки, используя метод find.

Вы также можете увидеть метод Pattern.matches здесь .

Однако, если вы действительно хотите использовать метод find, вам придется использовать "\\+[0-9]+$" для регулярного выражения, чтобы метод find соответствовал полной строке.$ означает, что конец строки должен быть там.

Кроме того, если вы планируете вызывать checkPhoneNumberIsValid, часто вам следует предварительно скомпилировать регулярное выражение, поскольку оно более эффективно, как указано здесь :

private static final Pattern PHONE_NUMBER_REGEX = Pattern.compile("\\+[0-9]+");

public boolean checkPhoneNumberIsValid(String arg) {
    return PHONE_NUMBER_REGEX.matcher(arg).matches();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...