Регулярное выражение для проверки на строку, содержащую пробелы и специальные символы
У меня есть следующее регулярное выражение:
String PASSWORD_PATTERN = "((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,12})";
И я проверяю утверждение следующим образом:
Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
Matcher matcher = pattern.matcher(password);
if(!matcher.matches()) {
// error
}
Как я могу настроить этот шаблон, чтобы включить проверку на наличие пробелов и специальных символов? Как и в методе matches (), он должен завершиться ошибкой, если пароль содержит пробелы или специальные символы.
3 ответов:
Если вы хотите только отклонить пробелы, вы можете использовать:
(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])\\S{6,12}
\\Sбудут совпадать только не-пробелы.Кроме того, вам, вероятно, не нужны внешние скобки.
Правка: не видел других частей.
Если вы хотите отклонить специальные символы, вы можете изменить
\\Sна отрицаемый класс. Использование этого, однако, означает, что вам придется использовать:[^\\s ... ]Например, допустим, что не должно быть никаких
?или пробелов. Это становится:(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?]{6,12}Если вы не хочу
!ни того, ни другого:(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[^\\s?!]{6,12}
Как и в методе matches() должен произойти сбой, если пароль содержит пробелы или специальные символы
Так же, как вы используете look-ahead
(?=....), чтобы проверить, содержит ли пароль хотя бы один
- цифра
(?=.*\\d),- строчная буква
(?=.*[a-z])- прописная буква
(?=.*[A-Z])Вы можете добавить negative-look-ahead
(?!...), чтобы убедиться, что ваш пароль не будет содержать никаких нежелательных символов как
- пробел
(?!.*\\s)- специальные символы (в зависимости от того, что вы хотите здесь), например, не могут иметь
+,-,!(?!.*[+\\-!])Теперь просто объедините все это в один шаблон
((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\\s)(?!.*[+\\-!]).{6,12})
Просто добавьте:
[\w/^\s]- \w обнаруживает использование символов word (без специальных символов).
- ^ означает, что нет и \s используется для обнаружения символа пробела.
- Таким образом, ^\s гарантирует отсутствие пробела.Полная строка:
"((?=.*\\d)(?=.*\\w)(?=.*[\w/^\s])(?=.*[A-Z]).{6,12})"
Comments