Регулярное выражение для проверки на строку, содержащую пробелы и специальные символы



У меня есть следующее регулярное выражение:



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 (), он должен завершиться ошибкой, если пароль содержит пробелы или специальные символы.

454   3  

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

    Ничего не найдено.