2012-02-27 1 views
6

Я создаю пользовательский интерфейс администратора, где пользователь может управлять списком строк PCRE, которые передаются в PHP preg_match в других точках моего приложения.Как я могу определить, является ли данная строка допустимым входом для preg_match PHP?

Перед тем как сохранить вход пользователя для последующего использования preg_match, я хотел бы сначала подтвердить, что вход пользователя является допустимым выражением PCRE, иначе при передаче его на preg_match выдается сообщение об ошибке.

Каков наилучший способ проверки данной строки, чтобы узнать, является ли это допустимым PCRE в PHP?

ответ

3

Ваш лучший выбор - просто передать строку preg_match и поймать любые ошибки, которые произойдут.

try{ 
    preg_match($in_regex, $string, $results); 
    //Use $results 
} catch (Exception $e) { 
    echo "Sorry, bad regex (/" . $in_regex . "/)"; 
} 

[Редактировать] Поскольку это не будет работать, вы можете попробовать:

function bad_regex($errno, $errstr, $errfile, $errline){ 
    echo "Sorry, bad regex."; 
} 
set_error_handler("bad_regex"); 
preg_match($in_regex, $string, $results); 
restore_error_handler(); 
+0

Я не думаю, что 'preg_match' бросил catchable исключение ... позвольте мне попробовать это. Если я ошибаюсь, я чувствую себя застенчивым! – Josh

+0

Кроме того, вы можете использовать 'preg_last_error', чтобы узнать больше об ошибке – scibuff

+0

Да, это не сработает. 'preg_match' не генерирует исключение, оно вызывает' E_WARNING': 'Warning: preg_match(): разделитель не должен быть буквенно-цифровым или обратным слэшем в строке 4'. Это прервет процесс сохранения моего приложения, так как я не могу уловить это предупреждение и возобновить его. – Josh

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

  • Нет связанных вопросов^_^