Регулярное выражение не распознает подчеркивание ( _ ) как специальный символ

#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.