Проверка пароля с использованием Java регулярное выражение не удается - PullRequest
3 голосов
/ 02 мая 2020

В мои требования входит, среди прочего, проверка правильности ввода пароля, чтобы один из следующих символов включался только один раз. ! @ # $% ^ & * () _ + =? ~

Для выполнения sh, что я написал следующее:

StringBuilder builder = new StringBuilder("(?=.*[a-z])");
builder.append("(?=.{1}[!@#$%^&*()_+=?~])");

Pattern pattern = Pattern.compile(builder.toString());
Matcher matcher = pattern.matcher(input);

if(matcher.matches){
    return True;
}

Но это всегда терпит неудачу, когда я передаю действительный ввод в моем модульном тесте. Я новичок в регулярных выражениях.

1 Ответ

3 голосов
/ 02 мая 2020

Вы можете использовать это регулярное выражение с 2 утверждениями предпросмотра:

^(?=[^a-z]*[a-z])(?=[^!@#$%^&*()_+=?~]*[!@#$%^&*()_+=?~][^!@#$%^&*()_+=?~]*$).{12,}$

Демонстрация RegEx

Обратите внимание, что в .matches() метки начала и конца метода подразумеваются автоматически в заданном регулярном выражении.

Подробности RegEx:

  • ^: начало
  • (?=[^a-z]*[a-z]): позитивный взгляд, чтобы убедиться, что мы иметь хотя бы одну строчную букву
  • (?=[^!@#$%^&*()_+=?~]*[!@#$%^&*()_+=?~][^!@#$%^&*()_+=?~]*$): положительный взгляд, чтобы убедиться, что у нас ТОЛЬКО один из заданных специальных символов.
  • .{12,}: совпадение мин. 12 любых символов
  • $: конец
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...