自定义规则详解
这是一篇进阶参考文档,重点不是教您第一次怎么写,而是把统一自定义规则的真实行为讲清楚:字段是什么、运算符怎么解释、为什么会冲突、最终哪条规则会胜出。
统一规则模型
短信卫士现在的自定义规则是一套统一模型,而不是两套独立系统。每条规则都可以同时携带号码条件和正文条件。
| 字段 | 说明 | 要点 |
|---|---|---|
| 号码条件 | 检查发件号码、短号、服务号或国际前缀 | 可空 |
| 正文条件 | 检查短信正文是否包含目标模式 | 可空 |
| 分类 | 命中后的最终处理结果 | 选“正常”就是允许规则 |
| 优先级 | 多条规则同时命中时的排序依据 | 默认 100,范围 -100 到 1000 |
| 归一化增强匹配 | 先清洗文本再做通配符匹配 | 只影响通配符,不改变正则 |
| 备注 | 给自己看的说明 | 建议写明用途 |
一条规则至少要有一个条件:
- 只有号码条件:只看发件人。
- 只有正文条件:只看短信内容。
- 号码 + 正文同时存在:两项必须同时命中,关系是 AND。
请先看 《自定义规则新手手册》。本页默认您已经知道规则测试、允许规则和优先级这些基础概念。
通配符语法总览
当规则使用“通配符”模式时,短信卫士采用统一的表达式解析方式。下面是最值得记住的 5 个语法符号:
| 写法 | 含义 | 例子 |
|---|---|---|
* |
任意长度的任意内容,可为空 | 106*、验证*码 |
|、空格、换行 |
OR,任意一个子句命中即可 | 贷款|借钱|放款 |
+ |
AND,同一子句中的条件都要成立 | 优惠+券、+86*+*3851 |
!token |
NOT,该 token 不能命中 | 优惠+!过期 |
\ |
转义特殊字符 | C\+\+ |
重要提醒:空格也会被当成 OR 分隔符。所以 工商 银行 表示“工商”或“银行”,不是带空格的完整短语。
正则模式例外:一旦切到正则表达式模式,上面这套通配符语法就不再参与,整段文本完全按正则解释。
允许规则与优先级
当多条规则同时命中同一条短信时,系统不会随机选一条,而是按固定顺序决定“最终胜出规则”:
- 允许规则优先:分类为“正常”的规则总是优先。
- 优先级更高的规则优先。
- 带号码条件的规则优先于纯正文规则。
- 如果还相同,号码侧命中的规则更靠前。
- 如果仍然相同,按规则列表顺序决定。
默认优先级是 100,可调范围是 -100 到 1000。没有冲突时,默认值通常就够用;只有多条规则抢同一类短信时,才需要刻意拉开数值。
如果您开启了中国大陆环境下的“五位及以下号码放行”,像 10086、12306、955xx 这类短号会优先放行。规则测试里也会把这类情况标记为“被五位号码规则跳过”。
发件人号码条件
号码条件最适合处理固定号段、短号、国际区号或已知服务号。通配符模式下,它更像“号码片段匹配器”,而不是普通全文搜索。
号码条件适合的场景
- 精确短号:如
10086、95533。 - 固定号段:如
1069*、+852*。 - 尾号特征:如
*3851。 - 排除某一小段:如
+86*+!+86106*。
号码通配符的实际行为
- 号码通配符模式优先处理
+、数字和*。 - 子句开头的
+默认当作国际区号前缀,例如+86*。 - 想表达“同时满足”,用
+,例如+86*+*3851。 - 想表达“不能出现”,用
!token,例如+86*+!+86106*。 - 如果号码结构已经非常复杂,建议直接切到正则模式。
| 目的 | 写法 | 说明 |
|---|---|---|
| 拦所有 1069 号段 | 1069* |
前缀匹配 |
| 抓中国区号且尾号 3851 | +86*+*3851 |
AND 组合 |
| 抓 +86 号码但排除 +86106 | +86*+!+86106* |
排除子句 |
| 抓多个境外前缀 | +852*|+886*|00* |
OR 组合 |
正文条件
正文条件最常用,因为垃圾短信的话术变化远大于号码来源。它既可以写成简单关键词,也可以写成多词组合、排除条件或正则表达式。
正文通配符的实际规则
- 基础关键词:
退订回T,正文包含这段连续文字即可。 - 通配符:
加微信*领红包,中间允许插入任意内容。 - AND:
澳门+博彩,两个词都要出现。 - OR:
贷款|借钱|放款,任意一个出现都算命中。 - NOT:
优惠+!过期,有“优惠”但不能有“过期”。 - 转义:
C\+\+匹配字面量 C++。 - 组合条件:
验证*码+123456,既要像验证码,又要包含目标数字。
归一化与规则测试
归一化增强匹配适合处理插入符号、全角半角、部分繁简差异等问题。它只影响通配符逻辑,不会改变正则表达式本身。
| 场景 | 更适合的规则写法 | 说明 |
|---|---|---|
【驗-證-碼】123456 |
验证*码+123456 |
适合处理验证码被插入干扰字符 |
+86 186-0285-3851 |
+86186* |
适合号码里混入空格和符号 |
加 V X 领红包 |
加*v*x*领红包 |
适合话术被故意拆开 |
规则测试页能告诉您什么
- 最终是哪条规则被选中。
- 哪些规则命中了但没胜出。
- 号码条件和正文条件分别有没有命中。
- 是否因为五位号码放行而被整体跳过。
高级:正则表达式进阶
只有当通配符写法不够表达您的需求时,才建议切到正则。正则越复杂,后续越难维护。
常用语法速查
| 符号 | 含义 | 示例 |
|---|---|---|
^ 和 $ |
分别匹配开头和结尾 | ^106 表示必须以106开头 |
. (点) |
匹配任意一个字符 | 代.开发票 匹配 "代开开发票", "代.开发票" 等 |
* |
前面的字符可以出现0次或多次 | A.*B 匹配 A 开头 B 结尾的整段话 |
\d |
匹配一个数字 (0-9) | \d{4,6} 匹配4到6位连续数字 |
| |
代表"或" (OR) | (发票|贷款|博彩) 命中其中任意一个词 |
当您需要处理位数范围、字符组、可选片段、复杂顺序或大量变体时再用正则;如果只是“这个词或那个词”“中间可能夹一些字符”,通配符通常更好维护。
实用规则示例
【黑名单】拦 1069 营销号段里的退订短信
号码条件:1069*
正文条件:退订+回T
分类:推广
说明:只有 1069 类发送源并且带典型营销退订话术时才命中,误伤率低于纯号码规则。
【允许规则】保护验证码
正文条件:验证码|动态码|校验码
分类:交易 或 正常
说明:用于压过同级别的拦截规则,避免验证码被营销类关键词误伤。
【黑名单】拦境外高风险前缀
号码条件:+852*|+886*|00*
分类:垃圾
【黑名单】排除“已过期”优惠
正文条件:优惠+!过期
分类:推广
【正则】识别引流账号
正文条件:(薇|v|V)(信|x|X).{0,3}(\d{6,11}|[a-zA-Z0-9_]{6,15})
分类:垃圾
【归一化】处理验证码干扰字符
正文条件:验证*码+123456
归一化增强匹配:开启
说明:适合处理类似 【驗-證-碼】123456 的文本。