@Hi-Pyncho

Как тут работает позитивная опережающая проверка?

Есть регулярное выражение для валидации пароля.

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])[a-zA-Z\d]{6,}$

Не совсем понятно, почему перед опережающими проверками ничего нет, когда формула такая X(?=Y)? Какой тут алгоритм работы и чтения такого выражения?
Заранее спасибо за ответ!
  • Вопрос задан
  • 69 просмотров
Решения вопроса 2
WblCHA
@WblCHA
Тут соль в проверки на наличие каждого из пула символов. Это можно переписать так:
if(
	/[a-z]/.test(str)
  && /[A-Z]/.test(str)
  && /\d/.test(str)
  && /^[a-zA-Z\d]{6,}$/.test(str)
)
Ответ написан
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
(?=) ищет, начиная с текущей позиции в строке, но по результатам поиска текущую позицию не меняет.
Соответственно, ^ означает, что поиск начинается с начала строки.
И если первый (?=) завершается успехом, срабатывает второй (?=) - опять с начала строки, а потом и третий - тоже с начала строки.
А после завершения успехом всех трёх (?=), срабатывает - опять же, с начала строки - [a-zA-Z\d]{6,}$

P.S. Конструкция X(?=Y) означает, что сначала обычным образом ищется X, после чего (?=Y) начинает поиск с текущей позиции - сразу после найденного X.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы