preg_match 升级 Wamp 后失败

preg_match fail after upgrade Wamp

为了防止恶意用户试图利用密钥,我们确保密钥仅使用字母数字文本和一些其他项目命名,使用 preg_match

这是代码:

if (!preg_match('#^[&a-zA-Z0-9\.:_/-\s]+$#uD', $str)) {
    exit('String not valid:' . $str);
}

此功能一直运行良好,直到上周客户在测试服务器上更新 WAMP。使用字符串作为 dverse.session,代码输入 EXIT()。我用 http://www.phpliveregex.com/ 检查了正则表达式,但正则表达式运行良好。可能是什么问题呢?

您应该在正则表达式中转义减号:

if (!preg_match('#^[&a-zA-Z0-9\.:_/\-\s]+$#uD', $str)) {
    exit('String not valid:' . $str);
}

已解决。感谢大家,解决方案是:

if (!preg_match('#^[&a-zA-Z0-9\.:_/\-\s]+$#uD', $str)) {
        exit('String not valid:' . $str);
    }

这是由于更改 PHP 版本造成的。您可以在 http://sandbox.onlinephpfunctions.com/ 使用代码查看:

$str = "dverse.session";

if (!preg_match('#^[&a-zA-Z0-9\.:_/-\s]+$#uD', $str)) {
    exit('String not valid:' . $str);
} else {
    echo "OK";
}

将 PHP 版本从 5.5.5 更改为 5.6.2(或 5.5.18)出现错误。谢谢!