Я пишу регулярное выражение для проверки пароля в Javascript. Ограничения:

  1. Пароль должен содержать хотя бы один заглавный символ
  2. Пароль должен содержать хотя бы специальный символ

Используя метод проб и ошибок и некоторые поиски в сети, я обнаружил, что это работает:

/(?=.*[A-Z]+)(?=.*[!@#\$%]+)/

Может кто-нибудь объяснить, какая часть этого выражения упоминает, что заглавная буква и специальный символ могут входить в ЛЮБОЙ порядок?

2
atlantis 21 Июн 2010 в 19:09

3 ответа

Лучший ответ

Я думаю, что это будет работать еще лучше:

/(?=.*[A-Z])(?=.*[!@#\$%])/

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

Следующее регулярное выражение (предложенное Gumbo) немного более эффективно, поскольку позволяет избежать ненужного возврата:

/(?=[^A-Z]*[A-Z])(?=[^!@#\$%]*[!@#\$%])/

Однако для паролей обычной длины разница во времени, вероятно, не будет легко измеримой.

2
SilentGhost 21 Июн 2010 в 16:05

"? =" делает это. Это «позитивный взгляд»

Из синтаксиса регулярных выражений JavaScript

Положительный прогноз соответствует строке поиска в любой точке, где начинается шаблон соответствия строки. Это совпадение без захвата, то есть совпадение не фиксируется для возможного последующего использования. Например, «Windows (? = 95 | 98 | NT | 2000)» соответствует «Windows» в «Windows 2000», но не «Windows» в «Windows 3.1». В предпросмотрах не используются символы, т. Е. После совпадения поиск следующего совпадения начинается сразу после последнего совпадения, а не после символов, составляющих предпросмотр.

1
Ryan Conrad 21 Июн 2010 в 15:13

?= называется предвидением, где он сканирует остальную часть строки, чтобы увидеть, найдено ли совпадение. Обычно, регулярные выражения идут символ за символом, но ?= сообщает ему «смотреть вперед», чтобы увидеть, существует ли он.

Существует также негативное отношение к ?!.

2
Aaron Harun 21 Июн 2010 в 15:15