Регулярное выражение в php-буквы и цифры с ограниченной длиной
Как сделать регулярное выражение, которое принудительно:
- буквы и цифры (по крайней мере 1 из каждой)
- минимальная и максимальная длина (от 10 до 50)
- ничего, кроме букв или цифр
При использовании PHP preg_match?
Вот что у меня получилось:
^[A-Za-z0-9]{10,50}$
Кажется, что он делает все, кроме букв и цифр.
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}$