Я хочу, чтобы регулярное выражение, которое позволяет только это:Быстрое регулярное выражение необходимо
letter a-z
case insensitive
allows underscores
allows any nrs
Как это должно быть написано?
Благодаря
Я хочу, чтобы регулярное выражение, которое позволяет только это:Быстрое регулярное выражение необходимо
letter a-z
case insensitive
allows underscores
allows any nrs
Как это должно быть написано?
Благодаря
Это было бы
\w
, если я не ошибаюсь (Как выясняется, это зависит: В PHP в meaning of \w
изменения с locale, что в настоящее время в действительности). Вы можете использовать a more explicit form прибить его вниз:
[A-Za-z0-9_]
я использую его в контексте, добавить запуск из-строки и с истекшим струне anchors и quantifier, который определяет, сколько символов позволит:
^[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, буквы а через г и подчеркивания. i
в конце делает совпадение без учета регистра. ^
и $
являются якорями, которые соответствуют началу и концу строки соответственно. Значение +
означает 1 или более символов.
Неправильно. Это вернет ложное положительное значение, если вход содержит допустимый символ, даже если он также содержит недопустимые символы. – Matt
Хороший вопрос - я редактирую свой ответ. –
Это не сработает. «a b c d» пройдет, так как вы ищете только один из символов в строке, чтобы соответствовать. Измените шаблон на '/^[0-9a-z _] $/i', и он будет работать. – ceejayoz
PHP:
if (preg_match('/[^a-z0-9_]/i', $input)) {
// invalid input
} else {
// valid input
}
Так [a-z0-9_]
представляет собой набор символов для допустимых символов. Добавление ^
в начало ([^a-z0-9_]
) отменяет его. Логика заключается в том, что если какой-либо символ совпадает с чем-то, что НЕ находится в допустимом наборе символов, вход считается недействительным.
/i
в конце делает регистр символов нечувствительным.
+1 - Несколько раз легче повторное выражение для проверки/чтения является отрицанием. Вместо того, чтобы допускать только определенные символы, просто проверьте наличие недопустимого символа. – gnarf
Но когда шаблон тот же (отрицание бара), это только вопрос обращения блоков if/else или установки '!' Перед 'preg_match'. Отрицание облегчает изменение проблемы, а не когда вы пишете тот же самый точный шаблон несколько иначе. –
Как это должно быть написано? (Разбить его на несколько строк)
/ # 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
}
Вы можете также использовать +
вместо *
, если вы хотите, чтобы по крайней мере один символ, а также.
Разве это не чувствительно к регистру? Ваш код, который есть (не объяснение!) –
@Vivin Paliath - Yup! Спасибо за нежный толчок. – gnarf
Все в порядке, нет проблем! :) –
Ничего ... Не знаю много о regexp – 2010-06-08 16:09:06
На каком языке? Все в тегах? –
php, извините, ребята ... – 2010-06-08 16:09:57