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

PHP preg_match校验textarea合法字符返回false,求助排查原因

解决textarea输入正则校验始终返回false的问题

看起来你的问题大概率是忽略了textarea输入中的换行符导致的,我帮你一步步拆解:

核心问题:正则未包含换行符

当用户在textarea中输入内容时,按下回车键会产生换行符(\n,Windows系统下是\r\n),但你的正则表达式/^[-\p{L}\p{N} #&()!*,.;'\/\\\\]+$/u的字符集中并没有包含\r和\n。只要输入内容里有换行,正则就会匹配失败,直接返回false。

验证方法

你可以先临时在PHP代码中输出提交的内容,确认是否存在换行或其他未被允许的字符:

var_dump($_POST["Description"]); // 查看实际提交的内容细节
exit;

修复方案

修改正则表达式,将换行符\r和\n加入允许的字符集即可:

if(!preg_match("/^[-\p{L}\p{N} \r\n#&()!*,.;'\/\\\\]+$/u", $_POST["Description"])){
    // 处理错误逻辑
}

额外注意点

  • 如果用户可能输入制表符(\t)或者其他空白字符,你也可以用\s来匹配所有空白字符(包含空格、换行、制表符等),不过要注意\s还包含垂直制表符等,根据你的需求调整:
    // 用\s替代空格和\r\n,匹配所有空白字符
    if(!preg_match("/^[-\p{L}\p{N}\s#&()!*,.;'\/\\\\]+$/u", $_POST["Description"])){
        // 错误处理
    }
    
  • 检查是否有其他你认为"合法"但未被包含的字符(比如双引号"),如果需要也可以加入字符集。

内容的提问来源于stack exchange,提问作者Koko6969

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:44