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
相关产品推荐
相关产品推荐

