2016-04-28 4 views
1

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

Однако проблема возникает, когда пользователь вводит неверный шаблон один например, который вызывает ошибку вроде:

preg_match() [function.preg матча]: Неизвестный модификатор.

Функция поиска должна быть способна обрабатывать любые ошибки, вызванные методом preg_match(), и отображать на экране общее недопустимое сообщение шаблона. Я смотрел онлайн, но я не могу найти ни одного поймать весь путь ловли любой ошибки preg_match() может бросить, у кого есть идеи?

+0

Вы положили его в структуру try/catch? –

+0

preg не генерирует исключений ... –

+1

'set_error_handler()' и выбрасывать ... – AbraCadaver

ответ

2

Для простого примера установите обработчик ошибок и бросить Exception или ErrorException:

function exception_error_handler($severity, $message, $file, $line) { 
    throw new ErrorException($message, 0, $severity, $file, $line); 
} 
set_error_handler("exception_error_handler"); 

Тогда попробуйте/поймать:

try { 
    preg_match('/.*/hello', 'hello'); 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

Caught исключение: preg_match(): Неизвестный модификатор 'h'

+0

К сожалению, не все ошибки регулярного выражения могут быть пойманы таким образом. Например. неверное кодирование символов исходной строки, только что сделанное 'preg_match_all' в моем проекте, тихо возвращает' false'. ('preg_last_error' сообщил' PREG_BAD_UTF8_ERROR', но никакого исключения никогда не возникало. Я дважды проверял с неизвестным модификатором, он был брошен счастливо.) –

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