PHP - Требования к паролю RegEx - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь проверить, соответствует ли пароль новой учетной записи этим критериям:

  • Длина от 8 до 30 символов
  • Содержит как минимум 1 строчную букву (az)
  • Содержит как минимум 1 заглавную букву (AZ)
  • Содержит как минимум 1 из следующих специальных символов: _-! # * @ &

У меня есть функция вот так:

function validPassword($str) {
    return preg_match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_-!#*@&])[A-Za-z\d_-!#*@&]{8,30}$", $str);
}

Но я получаю сообщение об ошибке. Он должен вернуть «истину» для этого пароля, например: HelloWorld123!

Но вместо этого он возвращает ложь. Есть идеи, что может быть не так?

if (validPassword($password) == true) {
  // good password
}

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Вы забыли экранировать '-' и разделители ...

function validPassword($str) {
  return preg_match("/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$/", $str);
}
0 голосов
/ 19 июня 2020

В вашем регулярном выражении есть ошибки, поэтому в первую очередь нет совпадения.

Измените свое регулярное выражение на это:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$

Посмотрите в вашем регулярном выражении здесь: https://regex101.com/r/ogPPeb/1

...