正则表达式怎么用?如何编写符合指定规则的regex过滤器?
正则表达式修正方案
原写法存在的问题
- 末尾字符匹配规则错误:
[A-Y^O]中^仅在字符组开头时表示否定,放在中间会被识别为普通字符匹配,无法排除字母O - 未排除8位数字全为0的场景:缺少针对连续8个0的否定判断
- 缺少结束锚点
$:会错误匹配长度超过11位、且前11位符合规则的字符串 - 冗余的
{1}量词:正则默认匹配1次,无需显式标注
最终可用正则
^[A-M][A-L](?!0{8})\d{8}[A-NP-Y]$
规则拆解(对应需求)
^:匹配字符串开头,确保从第一个字符开始校验[A-M]:匹配第一个字符,范围为大写字母A-M[A-L]:匹配第二个字符,范围为大写字母A-L(?!0{8}):负向零宽断言,判定接下来的8个字符不能全为0,不占用匹配位置\d{8}:匹配第3到第10位的8个数字[A-NP-Y]:匹配最后一个字符,范围为大写字母A-Z,直接排除O、Z两个不符合要求的字符$:匹配字符串结尾,确保总长度刚好为11位
校验示例
- 符合规则:
AB00001000C、ML12345678P - 不符合规则:
AB00000000C(8位数字全0)、AB12345678O(末尾为O)、AB12345678Z(末尾为Z)、NB12345678A(首字符超出A-M范围)、AM12345678A(第二个字符超出A-L范围)、AB12345678A1(长度超出11位)
内容的提问来源于stack exchange,提问作者Sean J
相关产品推荐
相关产品推荐

