Регулярное выражение в php-буквы и цифры с ограниченной длиной


Как сделать регулярное выражение, которое принудительно:

  • буквы и цифры (по крайней мере 1 из каждой)
  • минимальная и максимальная длина (от 10 до 50)
  • ничего, кроме букв или цифр

При использовании PHP preg_match?


Вот что у меня получилось:

 ^[A-Za-z0-9]{10,50}$

Кажется, что он делает все, кроме букв и цифр.

1 7

1 ответ:

Do:

^(?=.*(?:[A-Za-z].*\d|\d.*[A-Za-z]))[A-Za-z0-9]{10,50}$
  • (?=.*(?:[A-Za-z].*\d|\d.*[A-Za-z])) является нулевой шириной положительного lookahead, это гарантирует, что есть по крайней мере одна буква, и одна цифра присутствует

  • [A-Za-z0-9]{10,50} убедитесь, что совпадение содержит только буквы и цифры

Демо


Или даже чище, используйте два lookaheads вместо OR-ing (спасибо chris85):

^(?=.*[A-Za-z])(?=.*\d)[A-Za-z0-9]{10,50}$