Я нуждаюсь в помощи с regex, который проверяет, что строка содержит только букву и числа, но не только числа
Допустимый
* letters
* 1wret
* 0123chars
* chars0123
* cha2rs
Недопустимый
* 1324
* xcvxxc%$#
* xcv123xxc%$#
* _012chars
* _test
Вот компоненты regex, которые мы будем использовать:
^
и $
- начало и конец строки соответственно\d
соответствует цифре[a-zA-Z]
соответствует букве[a-zA-Z\d]
соответствует букве или цифре*
- повторение "ноль или больше"С их помощью мы можем составить нужный нам регекс (см. на rubular.com):
^\d*[a-zA-Z][a-zA-Z\d]*$
Вот объяснение шаблона:
from the beginning... till the end
| |
^\d*[a-zA-Z][a-zA-Z\d]*$
\_/\______/\_________/
Три части:
Лично (я ненавижу регулярные выражения и считаю, что их трудно поддерживать), я бы сделал это в два этапа.
это должно работать ^ ([a-zA-Z0-9] *) ([a-zA-Z] +) ([a-zA-Z0-9] *) $
EDIT sry получил *
и +
испортил
Это должно сработать:
^[0-9]*[a-zA-Z]+[a-zA-Z0-9]*$
Требуется хотя бы один символ [a-zA-Z]
.
^(?=.*[a-z])[a-zA-Z0-9]+$
(?=.*[a-z])
положительное опережение, чтобы убедиться, что в строке есть хотя бы одна буква (но не потребляет символов - отдает совпавшие символы, как только возвращается (в данном случае, как только находит букву)). [a-zA-Z0-9]+
убедитесь, что строка содержит только буквенно-цифровые символы. ^
и $
являются разделителями начала и конца строки. Вместо использования регулярного выражения вы также можете использовать функции ctype _ * ()
:
var_dump(ctype_alnum('letters') && !ctype_digit('letters')); // bool(true)
var_dump(ctype_alnum('0123chars') && !ctype_digit('0123chars')); // bool(true)
var_dump(ctype_alnum('1324') && !ctype_digit('1324')); // bool(false)
var_dump(ctype_alnum('xcvxxc%$#') && !ctype_digit('xcvxxc%$#')); // bool(false)
Но если вам нужно регулярное выражение, вы можете использовать следующее:
var_dump(preg_match('/^[a-z0-9]*[a-z]+[a-z0-9]*$/i', $input));
^[0-9]*[a-zA-Z]+[0-9a-zA-Z]*$
переведено: сначала сопоставьте 0 или более чисел, затем сопоставьте хотя бы одну букву, затем сопоставьте ноль или более букв или цифр до конца .