首页/开发/正则与编码速查/正则上线前的测试用例设计
正则基础45 条

正则上线前的测试用例设计

正则上线前应准备覆盖正例、反例与边界的样本集,反例按加多余内容、缺内容、换非法内容三类构造最能暴露宽松判定;还需覆盖全角字符、不可见空白、换行风格与超长输入,样本预期应与业务规则对齐。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌‌‌​​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

模式上线也是一次发布

一条模式进入生产后通常影响整条数据链路:校验通过的数据往下走,匹配错的内容被静默放过或误删。上线前准备一组覆盖正例、反例与边界的样本,是最划算的投入。

反例比正例重要

正例只能证明它能匹配,反例才能证明它不会乱匹配。设计反例时按三种方式构造:加法(正确输入上多一段字符)、删法(少一段)、换法(把某段换成非法内容),绝大多数宽松判定都能被这三类暴露。

基本信息

正例覆盖典型合法输入,含最长与最短形态
反例覆盖加多余内容、缺内容、替换非法内容
边界样本空串、恰好最短、恰好最长、首尾带空白
字符样本全角与半角、大小写、其它语言文字、不可见字符
跨行样本不同换行风格,验证锚点与点号行为
规模样本超长输入用于观察性能是否退化
校验语义校验场景必须用整串匹配,样本里要有「合法片段加杂质」的反例

典型使用场景

  • 新增或修改字段校验规则后做回归验证
  • 把模式改动纳入自动化测试,避免下次回归
  • 评估从别的引擎迁移模式的风险,用同一批样本对比结果
  • 排查线上误判时,用样本复现并补进测试集
  • 对性能敏感路径做长输入压测,确认不会出现耗时异常

样本集的组织方式

样本集的组织方式
正例:  2026-10-17          期望命中整串
正例:  2026-1-7            期望命中或按规则明确拒绝(需决策)
反例:  2026-10-17x         加法:尾部多了字符,必须拒绝
反例:  2026-10-17-         加法:尾部多了分隔符,必须拒绝
反例:  2026-10            删法:缺少日,必须拒绝
反例:  2026-aa-17         换法:非法字符混入,必须拒绝
边界:  (空串)             必须拒绝
边界:  ' 2026-10-17 '     首尾空白,按业务规则明确预期
字符:  2026-10-17      全角数字,按规则明确预期
跨行:  2026-10-17\n        末尾换行,验证锚点严格程度
规模:  超长字符串             观察耗时是否随长度线性增长

用例类型与目的

类型构造方式暴露的问题
正例典型合法输入规则是否可用
加法学反例合法内容后追加字符缺少锚点、包含式匹配
删法学反例合法内容缺一段可选结构过宽、量词次数偏小
换法学反例替换为非法字符字符类范围过宽、字符语义偏差
边界与超长空串、极长输入空匹配与性能退化
样本要跟业务规则一起确认预期,而不是跟着当前实现的结果走。否则测试只会固化现状,把现有缺陷一并保护起来。
涉及性能的模式,测试里要包含一条接近上线的长输入样本并记录耗时基线。回退型引擎在特定结构下的耗时增长不是线性的,靠肉眼审查发现不了。

易错点

  • 只准备正例样本,模式对非法输入的宽松判定长期无人发现
  • 样本预期直接照抄当前实现输出,把既有缺陷固化成「正确答案」
  • 忽略全角字符、不可见空白与换行风格样本,多语言环境下出现误判
  • 没有长输入性能样本,上线后遇到异常数据才出现耗时飙升

数据来源与参考

  • PCRE2 官方文档 pcre2test 手册:测试样本组织方式
  • OWASP 输入校验指南:白名单校验与用例设计
  • IEEE POSIX.1-2017:正则语义参考

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/regex-test-before-deploy.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌​​‌‌​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌‌​​​​​‌‌​‌‌​​​‌‌​‌‌‌‌​‌‌‌‌​​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​