Как проверить, что строка не содержит кириллицу и спецсимволы при помощи регулярного выражения?
Мне надо валидировать пароль и логин.
Строка может содержать латинские буквы, цифры и знак _
Сейчас мой код не проверяет на знаки $%#&? и др.
Как разрешить только знак _ и вернуть 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 шт):
Автор решения: Nowhere Man
→ Ссылка
Если известно, что допустимые символы включают только цифры, английские буквы и подчёркивание, следует использовать класс символов \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