PHP Regex失败,'&';字符串;在javascript中(正确地)传递


PHP Regex fails with '&' in string; passes (correctly) in javascript

运行Linux(Ubuntu 11.10)时,相同的正则表达式在JavaScript中有效,但当&包含在PHP中计算的字符串中时,该表达式将失败。我的意思是:

JavaScript正则表达式:

regex = /^(?:[a-zA-Z0-9 ',.@&!+-]{3,50})$/;

PHP正则表达式:

$settings['regex_name'] = "/^(?:[a-zA-Z0-9 ',.@&!+-]{3,50})$/";

当代码在浏览器中运行以验证字符串(例如D & L Auto Sales)时,JavaScript会匹配整个字符串。但是,当服务器端代码试图在同一字符串上匹配时,它会失败。

以前有人碰到过这个吗?

编辑:这是运行regex:的PHP代码

function validated_array(&$array) {
    global $settings;
    $filterDefinitions = array( "name" => array('filter' => FILTER_VALIDATE_REGEXP,
                                'options' => array('regexp' => $settings['regex_name']),
        ...
    );

    $retVal = filter_var_array($array, $filterDefinitions);

当代码使用D & L Auto Sales运行时,$retVal['name']为空。但是,当我删除&时,$retVal['name']有一个值。

您确定&在HTML中没有编码为&吗?

除此之外,Perl兼容正则表达式在JavaScript和PHP之间具有很高的兼容性(两者都支持),尤其是您在示例中给出的那个。