2013-03-12 5 views
1

Я пытаюсь поставить матч регулярного выражения в PHP, чтобы найти, содержит ли строка какие-либо другие недопустимые, кроме следующих символов символов,Борьба с регулярным выражением PHP?

[email protected]#$%^&*()_-+=\}]{[::'"/>.<, 
alpha, space, numeric 

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

ßab? - Invalid 
Ba,- - Valid 

Я попытался с помощью preg_match с несколькими входами, но не смог завершить его.

Любая помощь будет оценена по достоинству.

ответ

3

Update

Это выражение будет соответствовать отрицательный набор вашего допустимого диапазона:

$valid = preg_quote('[email protected]#$%^&*()_-+=\}]{[::\'"/>.<,', '/'); 

if (preg_match("/[^$valid\d\sA-Za-z]/", $invalid)) { 
     echo "invalid chars\n"; 
} 

Я использую preg_quote() здесь убедитесь, что все символы правильно экранированы.

Старый ответ

Я подсчитал, отрицательный набор, основанный на ваш вопрос:

if (preg_match('/[\x00-\x08\x0c\x0e-\x1f\x3b\x3f\x60\x7c\x7f-\xff]/', $str)) { 
     echo "matches invalid chars\n"; 
} 

Чтобы прийти к этому набору, вы можете использовать этот код:

$s = '[email protected]#$%^&*()_-+=\}]{[::\'"/>.<,' 
     . join('', range('a', 'z')) 
     . join('', range('A', 'Z')) 
     . join('', range('0', '9')) 
     . " \t\r\v\n"; 

$missing = count_chars($s, 2); 
print_r($missing); 

Он печатает массив порядковых кодов символов, который не находится внутри $s; с тем, что вы можете создать выше шаблон.

+0

Регулярное выражение, кажется, терпит неудачу, когда я вставляю числа – w00

+0

@ w00 Не могли бы вы привести пример? –

+0

Конечно, проверьте: http://codepad.viper-7.com/rdepdU – w00

0

Ниже регулярное выражение будет соответствовать любой строке, в которой содержатся специальные символы, альфа, пространство, число ..

/^[\s\[email protected]#$%^&*()+=\}\]{\[:'"\/>.<,-]*$/ 

^ является начало строки .. $ конец строки .. ^ , $ необходимы потому, что они будут соответствовать входной точно вместо частично

[] класс персонажа, который будет соответствовать любой один из символов в нем ..

* является квантором, который соответствовал бы характеру, предшествующей группу или класс символов 0 до многих раз ..

+1

Вы забыли избежать '/' в своем действительном списке символов. Должно быть '\ /' иначе это не сработает. – w00

+0

@ w00 мои плохие .. спасибо за ваше предложение ... отредактировал ответ .. – Anirudha

+0

он показывает ошибку на позиции «#»? в чем проблема? – user1518659

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