Я гуглил это в поисках похожего примера. Мне нужно использовать следующее регулярное выражение (которое работает), но ограничить количество разрешенных символов до 20:
/^[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*$/
проблема в том, что единственные примеры используют гораздо более простой шаблон сопоставления, который я не могу воспроизвести в приведенном выше примере:
напр.,
Я думаю, что длина символа, которую вы хотите разрешить, будет от 1 до 20. Если да, то вы можете попробовать следующее регулярное выражение.
^(?=.{1,20}$)[A-Za-z0-9]+(?:[@_\-.][A-Za-z0-9]+)*
(?=.{1,20}$)
положительный взгляд на первое утверждает, что длина символа должна быть от 1 до 20.
использование StrLen () проверить длину:
if (strlen($value) > 20)
{
// Too long
}
else
{
// OK, perform regex
}
@wavemode Ограничьте первое совпадение одним символом, а затем убедитесь, что длина второго совпадения составляет от 0 до 19:
Добавьте буквенные повторения между 2 и первым символом.
/^[A-Za-z0-9](?:[A-Za-z0-9]*[@_\-.][A-Za-z0-9]+){0,19}$/