【发布时间】:2026-01-11 04:40:01
【问题描述】:
我正在构建一个管理 UI,用户可以在其中管理一个列表 PCRE 字符串,这些字符串在我的应用程序的其他点传递给 PHP 的 preg_match。
在存储用户的输入供preg_match 以后使用之前,我首先要验证用户的输入是有效的PCRE 表达式,否则稍后将其传递给preg_match 会引发错误。
验证给定字符串以查看它是否是 PHP 中的有效 PCRE 的最佳方法是什么?
【问题讨论】:
我正在构建一个管理 UI,用户可以在其中管理一个列表 PCRE 字符串,这些字符串在我的应用程序的其他点传递给 PHP 的 preg_match。
在存储用户的输入供preg_match 以后使用之前,我首先要验证用户的输入是有效的PCRE 表达式,否则稍后将其传递给preg_match 会引发错误。
验证给定字符串以查看它是否是 PHP 中的有效 PCRE 的最佳方法是什么?
【问题讨论】:
您最好的选择是将字符串传递给 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();
【讨论】:
preg_match 抛出了一个可捕获的异常......让我试试这个。如果我错了,我会感到羞愧!
preg_last_error 获取有关错误的更多信息
preg_match 不会引发异常,它会导致 E_WARNING: Warning: preg_match(): Delimiter must not be alphanumeric or backslash in - on line 4。这将中断我的应用程序的保存过程,因为我无法捕捉到该警告并恢复。
popen,那个解决方案太可怕了!