preg_match разрешить буквы и цифры, но не менее 1 буквы

У меня есть следующий оператор preg_match, который позволяет вводить либо буквы от a до z, и только цифры от 0 до 9, и он должен иметь длину от 5 до 30 символов.

Тем не менее, как бы я также убедиться, что ввод не все цифры? Например, он должен содержать хотя бы 1 букву от a до z?

if (preg_match ('/^[a-zA-Z0-9\'.]{5,30}$/i', $str['user'])) {
}

1 ответ

Решение

Вы написали, что у вас есть регулярное выражение, которое позволяет вводить либо буквы от a до z, и только цифры от 0 до 9, но на самом деле ^[a-zA-Z0-9\'.]{5,30}$ соответствует строке от 5 до 30 букв ASCII, цифр, а также ' или же .,

Если вы просто хотите, чтобы ваше регулярное выражение совпадало с тем, которое ему соответствует, но не строка, состоящая только из цифр, используйте (?!\d+$) смотреть вперед:

'/^(?!\d+$)[a-z0-9\'.]{5,30}$/i'
   ^^^^^^^^

Обратите внимание, что вам не нужно указывать A-Z или же a-z диапазон, если вы используете i флаг без учета регистра (достаточно одного из них).

(?!\d+$) является отрицательным аргументом, который не совпадает, если есть одна или несколько цифр, за которыми следует конец строки ($) непосредственно справа от текущего местоположения (которое является началом строки).

Смотрите демо-версию регулярного выражения.

Если вы не хотите сопоставлять строку, которая состоит только из точек, или 'или цифры, используйте

'/^(?!(?:\d+|([\'.])\1*)$)[a-z0-9\'.]{5,30}$/i'

Смотрите еще одну демонстрацию.

Другие вопросы по тегам