Как проверить, что строка не содержит кириллицу и спецсимволы при помощи регулярного выражения?

Рейтинг: 0Ответов: 1Опубликовано: 19.03.2023

Мне надо валидировать пароль и логин.

Строка может содержать латинские буквы, цифры и знак _

Сейчас мой код не проверяет на знаки $%#&? и др.

Как разрешить только знак _ и вернуть false если есть другие знаки?

private static boolean isValidPasswordAndLogin(String password) {

    Pattern pattern = Pattern.compile("[0-9]*[a-zA-Z]*[_]*(?=\\S+$).{8,}");
    Matcher matcher = pattern.matcher(password);

    Pattern pattern2 = Pattern.compile("[а-яёА-ЯЁ]+");
    Matcher matcher2 = pattern2.matcher(password);

    if (matcher.find() && !matcher2.find()) {
        return true;
    }
    return false;

}

Ответы

▲ 1Принят

Если известно, что допустимые символы включают только цифры, английские буквы и подчёркивание, следует использовать класс символов \w и регулярное выражение для диапазона таких символов с минимальной длиной: str.matches("\\w{8,}"):

private static boolean isValidPasswordAndLogin(String password) {
    return password.matches("\\w{8,}");
}

Тесты:

for (String p : new String[]{"acb_123!", "abc-defgh", "123%xxyyzz", "2345_6758$", "$abcdefgh"}) {
    System.out.println(p + " isValid? " + isValidPasswordAndLogin(p));
}

Проверка НЕ пропускает символы !%$:

acb_123! isValid? false
abc-defgh isValid? false
123%xxyyzz isValid? false
2345_6758$ isValid? false
$abcdefgh isValid? false