Установить максимальную длину в регулярном выражении

Я гуглил это в поисках похожего примера. Мне нужно использовать следующее регулярное выражение (которое работает), но ограничить количество разрешенных символов до 20:

/^[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*$/

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

напр.,

0

Решение

Я думаю, что длина символа, которую вы хотите разрешить, будет от 1 до 20. Если да, то вы можете попробовать следующее регулярное выражение.

^(?=.{1,20}$)[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*

DEMO

(?=.{1,20}$) положительный взгляд на первое утверждает, что длина символа должна быть от 1 до 20.

2

Другие решения

использование StrLen () проверить длину:

if (strlen($value) > 20)
{
// Too long
}
else
{
// OK, perform regex
}
2

@wavemode Ограничьте первое совпадение одним символом, а затем убедитесь, что длина второго совпадения составляет от 0 до 19:

Добавьте буквенные повторения между 2 и первым символом.

/^[A-Za-z0-9](?:[A-Za-z0-9]*[@_\-.][A-Za-z0-9]+){0,19}$/
0
По вопросам рекламы [email protected]