【问题标题】:How can I tell if a given string is a valid input to PHP's preg_match?如何判断给定字符串是否是 PHP preg_match 的有效输入?
【发布时间】:2026-01-11 04:40:01
【问题描述】:

我正在构建一个管理 UI,用户可以在其中管理一个列表 PCRE 字符串,这些字符串在我的应用程序的其他点传递给 PHP 的 preg_match

在存储用户的输入供preg_match 以后使用之前,我首先要验证用户的输入是有效的PCRE 表达式,否则稍后将其传递给preg_match 会引发错误。

验证给定字符串以查看它是否是 PHP 中的有效 PCRE 的最佳方法是什么?

【问题讨论】:

    标签: php pcre


    【解决方案1】:

    您最好的选择是将字符串传递给 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,那个解决方案太可怕了!
    • 我有点失望答案被删除了 - 它非常聪明!
    最近更新 更多