RegEx для Positive Lookahead - правила паролей (содержат необходимые цифры и символы) - PullRequest
0 голосов
/ 23 мая 2019

Я бы хотел понять приведенное ниже регулярное выражение и попытался протестировать его в regex101

^(?=.*[a-zA-Z])(?=.*[0-9]).{4,}$

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Это регулярное выражение не имеет большого значения и может быть сокращено до:

.{4,}$ // match at least 4 characters (or more) before ending

Причина в том, что lookaheads определяют, где заканчивается соответствующий шаблон группы , заканчивается .Но вы помещаете lookahead в начало входной строки, ловя "" (ничто) перед всеми шаблонами lookahead.Таким образом, все lookaheads являются избыточными.

Итак:

^ шаблон должен начинаться с начала ввода

(?=.*[a-zA-Z])найти заголовок любого количества последовательных алфавитов (найден «TestPassword», не для включения в соответствующую группу)

(?=.*[0-9]) найти заголовок любого количества цифр (найдено «1», не для включения в группу соответствия)

Учитывая выше, единственное совпадение - это "" в начале "TestPassword1".Теперь мы продолжаем сопоставление ...

.{4,}$ теперь сопоставляем что-либо, по крайней мере, с 4 символами, расположенными прямо в конце ввода (найдено "TestPassword1", который равен , возвращен как совпадающая группа)

См. Приведенный ниже код для подтверждения и объяснения:

let regex = /^(?=.*[a-zA-Z])(?=.*[0-9]).{4,}$/;
[match] = "TestPassword1".match(regex);
console.log(match); //TestPassword1

// just test for lookaheads result in matching an empty string at the start of input (before "T")
regex = /^(?=.*[a-zA-Z])(?=.*[0-9])/;
match = "TestPassword1".match(regex);
console.log(match); //[""]

// we're now testing for at least 4 characters of anything just before the end of input
regex = /.{4,}$/;
[match] = "TestPassword1".match(regex);
console.log(match); //TestPassword1
0 голосов
/ 23 мая 2019

объяснил

 ^                        # BOS
 (?= .* [a-zA-Z] )        # Lookahead, must be a letter
 (?= .* [0-9] )           # Lookahead, must be a number
 .{4,}                    # Any 4 or more characters 
 $                        # EOS
...