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

PHP正则如何同时匹配数字、字母、汉字 过滤其余无效字符

问题解答

原写法不生效的原因

你编写的正则表达式逻辑存在错误:

  • \P{Han}的作用是匹配所有非汉字字符,[0-9a-zA-Z]的作用是匹配所有大小写英文字母和数字
  • 你使用|或逻辑连接两个匹配规则,代表只要符合「非汉字」或「是数字字母」的字符都会被替换为空
  • 由于数字、字母本身就属于「非汉字」的范畴,该正则最终会删除除汉字外的所有内容,因此无法得到预期结果。

正确的合并写法

你需要保留的是数字、字母、汉字三类字符,因此只需要匹配「不属于这三类的所有字符」替换为空即可,正确代码如下:

preg_replace('/[^0-9a-zA-Z\p{Han}]/u', '', $raw);

规则说明

  • [^xxx]是反向字符集,匹配所有不在xxx范围内的字符
  • \p{Han}用于匹配所有汉字,必须搭配u修饰符才能正常识别Unicode编码的汉字
  • 整体逻辑为删除所有非数字、非大小写字母、非汉字的字符,完全匹配你的需求。

效果验证

针对你给出的示例输入:

原始字符串:a>b%%c##1@23测$$试??\\:.##,,??!!
处理后输出结果为:abc123测试,与预期结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:24:04