Top.Mail.Ru
Ответы

Регулярные выражения. Ограничить длину всей строки через регулярное выражение

Написал такое выражение для проверки логина: /^[a-z]+[a-z0-9]*[_|-]?[a-z0-9]*$/i . Вроде все работает, но мне надо сделать так, чтобы было минимум 4 символа и максимум 20 символов. Искал в интернете, не мог найти ничего. Пробовал что-то такое: /^([a-z]+[a-z0-9]*[_|-]?[a-z0-9]*){4,20}$/i, но тоже не работает. Да, можно проверять длину строки JavaScript'ом, но я хочу узнать можно ли сделать это через регулярные выражения.

По дате
По Рейтингу
Аватар пользователя
Новичок
8лет

Нет, такое регуляркой не сделать. Добавив {4,20} ты объявляешь от 4 до 20 повторов подшаблона в скобках.
Можно задать фиксированный диапазон кол-ва повторов подшаблона, но невозможно определить зависимость кол-ва повторов одного подшаблона от результатов работы другого подшаблона.

Аватар пользователя

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

Вот вам готовый ваш шаблон для проверки ограничения длины по мимо основного шаблона правил:
^(?=.{4,20}$)[a-z]+[a-z0-9]*[_|-]?[a-z0-9]*

Потестить можете вот тут:
https://regex101.com/r/ttxxCh/1