#regex
#регулярное выражение
Вопрос:
Мои требования к регулярному выражению
- Содержит 1 заглавную букву
- Содержит 1 строчную букву
- Включает 1 цифру
- Включает 1 специальный символ
(/^(?=^.{8,40}$)(?=.*d)(?=.*W )(?=.*[a-z])(?=.*[A-Z])(?!^.*n).*$/)
Однако, если я набираю 1234ABcd_
, проверка завершается неудачей, только _
кажется, что специальные символы не распознаются. Есть какие-нибудь решения по моему регулярному выражению? Спасибо!
Комментарии:
1. В вашем регулярном выражении этого нет
_
. Может быть, это должен быть ваш угол атаки 🙂2. В этом регулярном выражении нет части, которая проверяет наличие «специальных символов», как бы вы их ни определяли. Есть
W
, который проверяет наличие символов, отличных от «word», но это не то же самое, что любая концепция «специальных символов», которую вы используете.3. Подчеркивание считается символом слова, поэтому оно не включено в
W
.
Ответ №1:
Похоже, вы используете (?=.*W )
для сопоставления специальных символов. Но _
это символ слова, который находится в w
, и W
это все остальное, так что это не соответствует _
. Измените его на: (?=.*[W_] )
Кроме того, вам не нужно
в этом. Для успешного выполнения вам нужно всего лишь сопоставить 1.