2015-05-07 4 views
0

У меня есть следующий фрагмент кода, в котором я хочу соответствовать предоставленному пользователю вводам, чтобы он соответствовал любому входу, указанному в регулярном выражении. Все работает нормально, но \ n часть, где я хочу разрешить несколько строк. И это, в частности, не работает.Проверка подлинности PHP для сопоставления нескольких строк с использованием preg_match()

if(preg_match("/[^A-Za-z0-9., \/-\n]/", $addr)) 
    { 
    echo "Invalid user input "; 
    exit; 
    } 

Я получаю сообщение

Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 17 in ...... 

Друзья говорят мне, как разрешить несколько строк здесь.

ответ

0

Вы можете использовать m (многострочный) модификатор в своем регулярном выражении ..

preg_match("/[^A-Za-z0-9., \/-]/m", $addr) 
           ^
+0

тогда еще я могу держать \ п часть? как я думал, это позволит многострочный. – sdk

+0

вы можете .. но это не будет полезно .. также вы можете изменить '' (пробел) на '\ s' –

0

Вы должны использовать

[^A-Za-z0-9., \/\n-] 

, как - перед тем \n создает недопустимый диапазон (- Текстовый диапазон из строя выпуск).

Если вы хотите, чтобы несколько строк, просто удалите \n:

[^A-Za-z0-9., \/-] 
+0

удаление \ n не будет служить моей цели. Как я упоминал без \ n, он работает нормально. Но мне нужно разрешить несколько строк. – sdk

+0

Я боюсь, что это не логично: вы не можете есть яйцо и иметь его. Когда вы помещаете '\ n' в диапазон, пользователь не сможет ввести его. Опция 'm' будет бесполезной, если вы не можете ввести новую строку. –

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