Я пытался и не мог найти ответ на этот вопрос, поэтому я задаю этот вопрос.
Мне нужно создать регулярное выражение для проверки пароля, и оно должно иметь следующие условия.
Я создал следующее регулярное выражение, но оно работает неправильно.
preg_match('/[A-Za-z\d$!^(){}?\[\]<>~%@#&*+=_-]{8,40}$/', $newpassword)
Может кто-нибудь, пожалуйста, помогите мне правильно исправить это регулярное выражение?
Благодарю.
Здесь вы идете, используя lookaheads, чтобы проверить свои условия:
^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!^(){}<>%@#&*+=_-])[^\s$`,.\/\\;:'"|]{8,40}$
Давайте сломаем его немного, потому что это выглядит неприятно:
^
Утверждает, что он находится в начале строки. (?=.*[a-zA-Z])
, проверяет, содержит ли он хотя бы одну букву (верхнюю или нижнюю). (?=.*\d)
, проверяет, содержит ли он хотя бы одну цифру. (?=.*[~!^(){}<>%@#&*+=_-])
, проверяет, что он содержит хотя бы один символ из вашего списка специальных символов. [^\s$,.\/\\;:'"|]{8,40}$
проверяет, что вся строка длиной от 8 до 40 символов и не содержит пробелов или недопустимых символов с использованием инвертированного символа класс. Демо на Regex101