Я хочу регулярное выражение, которое ПОЗВОЛЯЕТ только это:
letter a-z
case insensitive
allows underscores
allows any nrs
Как это должно быть записано?
Спасибо
Это будет
\w
если я не ошибаюсь (Как выяснилось, это зависит от того: В PHP значение \w
меняется в зависимости от локали, которая действует в данный момент). Вы можете использовать более явную форму, чтобы закрепить ее:
[A-Za-z0-9_]
я использую ее в контексте, добавьте начальный и конечный якоря и квантификатор, определяющий, сколько символов вы допустите:
^[A-Za-z0-9_]+$
if(preg_match('/^[0-9a-z_]+$/i', $string)) {
//if it matches
}
else {
//if it doesn't match
}
[0-9a-z_]
- это класс символов, определяющий цифры от 0 до 9, буквы от a до z и символ подчеркивания. Символ i
в конце делает совпадение нечувствительным к регистру. ^
и $
- это якоря, которые соответствуют началу и концу строки соответственно. +
означает 1 или более символов.
PHP:
if (preg_match('/[^a-z0-9_]/i', $input)) {
// invalid input
} else {
// valid input
}
Таким образом, [a-z0-9_]
- это набор символов для ваших допустимых символов. Добавление ^
спереди ([^a-z0-9_]
) сводит его на нет. Логика такова: если любой символ совпадает с чем-то, чего нет в допустимом наборе символов, вход считается недопустимым.
Символ /i
в конце делает совпадение нечувствительным к регистру.
Как это писать? (разбивая его на несколько строк)
/ # Start RegExp Pattern
^ # Match beginning of string only
[a-z0-9_]* # Match characters in the set [ a-z, 0-9 and _ ] * = Zero or more times
$ # Match end of string
/i # End Pattern - Case Insensitive Matching
Предоставляя вам
if (preg_match('/^[a-z0-9_]*$/i', $input)) {
// input is valid
}
Вы также можете использовать +
вместо *
, если вы хотите принудительно использовать хотя бы один символ.