2010-06-08 4 views
5

Я хочу, чтобы регулярное выражение, которое позволяет только это:Быстрое регулярное выражение необходимо

letter a-z 
case insensitive 
allows underscores 
allows any nrs 

Как это должно быть написано?

Благодаря

+0

Ничего ... Не знаю много о regexp – 2010-06-08 16:09:06

+0

На каком языке? Все в тегах? –

+0

php, извините, ребята ... – 2010-06-08 16:09:57

ответ

7

Это было бы

 
\w 

, если я не ошибаюсь (Как выясняется, это зависит: В PHP в meaning of \w изменения с locale, что в настоящее время в действительности). Вы можете использовать a more explicit form прибить его вниз:

 
[A-Za-z0-9_] 

я использую его в контексте, добавить запуск из-строки и с истекшим струне anchors и quantifier, который определяет, сколько символов позволит:

 
^[A-Za-z0-9_]+$ 
0
if(preg_match('/^[0-9a-z_]+$/i', $string)) { 
    //if it matches 
} 

else { 
    //if it doesn't match 
} 

[0-9a-z_] является класс символов, который определяет цифры от 0 до 9, буквы а через г и подчеркивания. i в конце делает совпадение без учета регистра. ^ и $ являются якорями, которые соответствуют началу и концу строки соответственно. Значение + означает 1 или более символов.

+2

Неправильно. Это вернет ложное положительное значение, если вход содержит допустимый символ, даже если он также содержит недопустимые символы. – Matt

+0

Хороший вопрос - я редактирую свой ответ. –

+0

Это не сработает. «a b c d» пройдет, так как вы ищете только один из символов в строке, чтобы соответствовать. Измените шаблон на '/^[0-9a-z _] $/i', и он будет работать. – ceejayoz

5

PHP:

if (preg_match('/[^a-z0-9_]/i', $input)) { 
    // invalid input 
} else { 
    // valid input 
} 

Так [a-z0-9_] представляет собой набор символов для допустимых символов. Добавление ^ в начало ([^a-z0-9_]) отменяет его. Логика заключается в том, что если какой-либо символ совпадает с чем-то, что НЕ находится в допустимом наборе символов, вход считается недействительным.

/i в конце делает регистр символов нечувствительным.

+0

+1 - Несколько раз легче повторное выражение для проверки/чтения является отрицанием. Вместо того, чтобы допускать только определенные символы, просто проверьте наличие недопустимого символа. – gnarf

+0

Но когда шаблон тот же (отрицание бара), это только вопрос обращения блоков if/else или установки '!' Перед 'preg_match'. Отрицание облегчает изменение проблемы, а не когда вы пишете тот же самый точный шаблон несколько иначе. –

1

Как это должно быть написано? (Разбить его на несколько строк)

/   # 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 
} 

Вы можете также использовать + вместо *, если вы хотите, чтобы по крайней мере один символ, а также.

+1

Разве это не чувствительно к регистру? Ваш код, который есть (не объяснение!) –

+0

@Vivin Paliath - Yup! Спасибо за нежный толчок. – gnarf

+0

Все в порядке, нет проблем! :) –

Смежные вопросы