You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用preg_match校验授权字符的正则表达式问题求助

问题修复方案

你原有代码存在三类问题,修复方案如下:

直接可用的修复后代码

// 逻辑:匹配到任何非授权字符即触发错误,和你原始需求逻辑完全一致
if (preg_match('&[^#{}()<>|_æ+@%.,?:;"~\\\\/=*$£€!^]+&', $input)) {
    $error = 1;
}

关键修改&转义规则说明

  • 分隔符优化:放弃使用和授权字符冲突的#作为正则分隔符,改为使用授权字符中没有的&作为分隔符,避免分隔符和规则内字符冲突需要额外转义
  • 字符串语法修复:使用单引号包裹整个正则表达式,避免规则内的双引号"和PHP字符串边界冲突,无需额外转义双引号
  • 正则元字符处理:
    • 把授权字符中的^移动到否定字符集的末尾,避免放在[^紧邻位置被识别为正则取反元字符,无需额外转义
    • 授权字符中的反斜杠\在PHP单引号字符串中需要写为\\\\,最终解析到正则规则中为单个\
    • 其余{/}/(/)/</>/|/+/*/$等常见元字符,放在[]字符集内部时不会被识别为元字符功能,无需额外转义

可选等效写法

如果你更习惯用“匹配整个输入全为合法字符”的逻辑校验,可使用以下等效代码:

// 逻辑:校验整个输入从开头到结尾全是授权字符,不符合则触发错误
if (!preg_match('&^[#{}()<>|_æ+@%.,?:;"~\\\\/=*$£€!^]+$&', $input)) {
    $error = 1;
}

内容的提问来源于stack exchange,提问作者François Macchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:36:07