MongoDB Compass正则筛选name含非字母数字字符的写法错误排查
你写的查询存在的问题
你当前的正则表达式逻辑完全不符合需求,核心错误有2个:
- 没有把合法字符放入字符集
[]中:你写的(?!0-9a-zA-ZÄÖÜäöüß )是负向先行断言,当前语义是「匹配开头后面没有紧接着0-9a-zA-ZÄÖÜäöüß这一整串连续字符的内容」,完全不是判断字符是否属于合法集合的逻辑。 - 正则匹配规则写反:你的需求是匹配存在至少一个非法字符的内容,你写的
^开头锚定逻辑只能判断开头位置的字符,无法识别开头合法、后续存在非法字符的内容,比如a!b这类数据会被你的正则漏掉。
正确的查询写法
直接用反义字符集匹配即可,只要name字段中存在任意一个不在合法集合中的字符就会命中:
{ "name": { "$regex": "[^0-9a-zA-ZÄÖÜäöüß ]" } }
如果需要兼容特殊大小写场景,可以追加$options参数:
{ "name": { "$regex": "[^0-9a-zA-ZÄÖÜäöüß ]", "$options": "i" } }
内容的提问来源于stack exchange,提问作者SEVENELEVEN
相关产品推荐
相关产品推荐

