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

求可匹配中文字符、ASCII字符并排除特殊字符的SQL正则表达式

满足要求的SQL正则表达式方案

最终可用的正则表达式

直接用这一行就能同时匹配中文、英文字母、数字、空格,且排除所有特殊字符:

SELECT (val::TEXT ~ '^[a-zA-Z0-9\p{Han} ]*$');

各部分作用说明

  • a-zA-Z0-9:覆盖大小写英文字母和阿拉伯数字
  • \p{Han}:精准匹配所有中文字符(PostgreSQL支持Unicode属性类,这个写法比模糊的非ASCII匹配更可靠)
  • :匹配空格字符
  • ^ 和 $:限定整个字符串都由允许的字符组成,避免出现部分内容合法但夹杂特殊字符的情况

测试示例

  • 合法内容测试:SELECT ('李四 678Xyz'::TEXT ~ '^[a-zA-Z0-9\p{Han} ]*$'); → 返回true
  • 特殊字符测试:SELECT ('@%&王五'::TEXT ~ '^[a-zA-Z0-9\p{Han} ]*$'); → 返回false
  • 如果要禁止空字符串,把正则里的*改成+即可:^[a-zA-Z0-9\p{Han} ]+$

之前写法的问题分析

  • 你之前用的[ !-’~¡-ÿ]包含了大量特殊字符(比如!、#、$),所以会误匹配不该允许的内容
  • 另一行^[^[:ascii:]]+$只能匹配全非ASCII的纯中文内容,没法处理中文和英文数字混合的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:09