@Hi-Pyncho

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

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

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

Не совсем понятно, почему перед опережающими проверками ничего нет, когда формула такая X(?=Y)? Какой тут алгоритм работы и чтения такого выражения?
Заранее спасибо за ответ!
  • Вопрос задан
  • 55 просмотров
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽