2010-09-14 2 views

ответ

5

Просто проверьте это. preg_match() вернет FALSE, если шаблон недействителен.

Возвращаемые значения: preg_match() возвращает количество совпадений шаблонов. Это будет 0 раз (нет совпадений) или 1 раз, потому что preg_match() будет остановить поиск после первого матча. preg_match_all() наоборот будет продолжать, пока не достигнет конца тема. preg_match() возвращает FALSE, если произошла ошибка.

8

Согласно docs,

preg_match() возвращает FALSE, если произошла ошибка.

проблема в том, что она также выдаст предупреждение.

Один из способов борьбы с этим - подавить вывод сообщения об ошибке, уловить возвращаемое значение и вывести ошибку, используя error_get_last(), если она была ложной.

Что-то вроде

$old_error = error_reporting(0); // Turn off error reporting 

$match = preg_match(......); 

if ($match === false) 
{ 
    $error = error_get_last(); 
    echo $error["message"]; 
} 

error_reporting($old_error); // Set error reporting to old level 

Вам не нужно об ошибке отчетности бит в производственной среде - это зависит от ваших настроек.

+0

+1 Для упоминания об ошибке вывода сообщений об ошибках. – Gumbo

+1

Знаете, это не запрещено использовать '@': p – Artefacto

+0

Должно быть 'if ($ match === false)' – webbiedave

0
if (preg_match($regex, $variable)) { 
    echo 'Valid'; 
} 
else { 
    echo 'InValid'; 
} 
+1

Вы должны использовать preg_match (...)! == false, чтобы проверить его, потому что он может вернуть 0, если он действителен, но делает не соответствует – mck89

+0

Вы должны сравнивать с FALSE: if (preg_match ($ regex, $ variable)! == FALSE) {'. Шаблон может быть действительным, без совпадений. См. [Docs] (http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn

0

Я думал, что видел метод для этого в MRE; оказывается, это был сам Фридль. Вот listing.

-1

Не используйте @, используйте обратную косую черту перед preg_match, чтобы выбросить исключение в более новые версии PHP (5.3+?).

tr{ 
    if (\preg_match($regex, $variable)===false) 
     echo 'Valid'; 
    else 
     echo 'InValid'; 
} 
catch(Exception $e) { 
    echo $e->getMessage(); die; 
} 
+0

Обратная косая черта просто относится к глобальному пространству имен. В противном случае он ничего не делает, даже не меняя поведения ошибки. –

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