2013-02-21 5 views
0

Я пытаюсь проверить, что строка содержит регулярное выражение и что она действительна в PHP. Обычно, я бы сделать это следующим образомValidate regex without throwing warning

<?php 
@preg_match($string, '') !== false; 

Это генерирует предупреждение, что это хорошо, потому что мы используем @ подавить его. Однако возникают проблемы, когда мы используем set_error_handler для улавливания ошибок, поскольку обработчик все равно будет запущен, несмотря на подавитель @.

Я хотел бы сделать что-то похожее на предоставленный код без предупреждения.

Предупреждение выброшен является:

preg_match(): Delimiter must not be alphanumeric or backslash 
+0

Вы говорите «ловить ошибки», вы имеете в виду исключения? Если это так, просто заверните вызов 'preg_match' в блок try/catch. –

+0

preg_match не генерирует исключение, он просто генерирует ошибку PHP. – Nathaniel

ответ

3

Просто добавьте это в обработчике ошибок:

function user_error_handler($severity, $msg, $filename, $linenum, $content) { 
    if (0 == (error_reporting() & $severity)) return; 
    ... 
} 

В этом случае из-за оператора @, error_reporting() вернет 0.