Я пишу PHP-скрипт, который принимает шаблон регулярного выражения от пользователя, который используется preg_match(). Как я могу проверить, что шаблон действителен?Как уловить недопустимый шаблон preg_match?
ответ
Просто проверьте это. preg_match()
вернет FALSE
, если шаблон недействителен.
Возвращаемые значения: preg_match() возвращает количество совпадений шаблонов. Это будет 0 раз (нет совпадений) или 1 раз, потому что preg_match() будет остановить поиск после первого матча. preg_match_all() наоборот будет продолжать, пока не достигнет конца тема. preg_match() возвращает FALSE, если произошла ошибка.
Согласно 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
Вам не нужно об ошибке отчетности бит в производственной среде - это зависит от ваших настроек.
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
Вы должны использовать preg_match (...)! == false, чтобы проверить его, потому что он может вернуть 0, если он действителен, но делает не соответствует – mck89
Вы должны сравнивать с FALSE: if (preg_match ($ regex, $ variable)! == FALSE) {'. Шаблон может быть действительным, без совпадений. См. [Docs] (http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn
Вы можете использовать preg_last_error() для получения ответов. Деталь страницы:
http://php.net/manual/en/function.preg-last-error.php
Спасибо!
Не используйте @, используйте обратную косую черту перед preg_match
, чтобы выбросить исключение в более новые версии PHP (5.3+?).
tr{
if (\preg_match($regex, $variable)===false)
echo 'Valid';
else
echo 'InValid';
}
catch(Exception $e) {
echo $e->getMessage(); die;
}
Обратная косая черта просто относится к глобальному пространству имен. В противном случае он ничего не делает, даже не меняя поведения ошибки. –
- 1. Недопустимый шаблон
- 2. preg_match шаблон в скобках
- 3. PHP preg_match специальный шаблон
- 4. Шаблон для preg_match
- 5. PHP проблема preg_match шаблон, шаблон регулярного выражения
- 6. PHP preg_match шаблон для решения
- 7. Нужен простой шаблон preg_match() PHP
- 8. PHP preg_match Wildcard шаблон поиск
- 9. PHP preg_match шаблон - Маленький вопрос
- 10. Извлечь шаблон с использованием preg_match
- 11. php preg_match regex специальный шаблон
- 12. Как использовать шаблон переменной с preg_match?
- 13. PHP preg_match не работает как шаблон HTML5
- 14. Недопустимый шаблон в XML-схеме
- 15. Недопустимый шаблон Диспетчера тегов Google
- 16. Почему этот шаблон не работает в preg_match()?
- 17. preg_match шаблон следующая строка два первых слова
- 18. preg_match и preg_replace может не совпадать шаблон
- 19. Почему этот шаблон не работает в preg_match
- 20. preg_match конкретный шаблон, содержащий - (дефис) в PHP
- 21. preg_match() шаблон регулярного выражения для моего URL
- 22. PHP preg_match() шаблон для времени FFmpeg
- 23. PHP preg_match определенный шаблон в имени хоста
- 24. preg_match найти и заменить шаблон строки
- 25. preg_match шаблон для сканирования этих цен
- 26. PHP preg_match, если шаблон является переменной
- 27. Php preg_match SQL пункт обновление шаблон
- 28. Возможно ли уловить любую ошибку из preg_match и отобразить общее сообщение об ошибке?
- 29. Как уловить Джерси 406 Не приемлемо
- 30. Кендо UI Форматирование чисел Недопустимый шаблон
+1 Для упоминания об ошибке вывода сообщений об ошибках. – Gumbo
Знаете, это не запрещено использовать '@': p – Artefacto
Должно быть 'if ($ match === false)' – webbiedave