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'
Смотрите еще одну демонстрацию.