如何编写正则表达式正确校验指定格式的业务标识符
错误原因
你写的正则存在三处核心错误:
- 固定枚举值不能放在
[]字符组中,[]仅匹配单个字符,也无需用逗号分隔枚举项,多选枚举需要用(选项1|选项2|选项3)的格式实现 - 13位数字段的匹配规则写为
[0-9]{11},位数少了2位,不符合格式要求 - 你给出的示例中8位段包含数字,原规则写为
[a-zA-Z]{8}仅匹配纯字母,无法匹配带数字的情况
正确校验正则
完全匹配你描述的通用格式(8位段仅为大小写字母)
^(ACVC|ALHAND|ATI|AVC|CRMG|FEDUC|GERO|PALIM|PFP|RPGH)-[0-9]{13}-[0-9]{3}\.(AVAN|MCPR|MCSC|PUPO|PUPS|PUSO|PUSS|RCRD|RMBI)\.[a-zA-Z]{8}-[0-9a-zA-Z]{7}$
匹配你给出的实际示例(8位段允许包含数字)
^(ACVC|ALHAND|ATI|AVC|CRMG|FEDUC|GERO|PALIM|PFP|RPGH)-[0-9]{13}-[0-9]{3}\.(AVAN|MCPR|MCSC|PUPO|PUPS|PUSO|PUSS|RCRD|RMBI)\.[0-9a-zA-Z]{8}-[0-9a-zA-Z]{7}$
说明
- 开头的
^和结尾的$用于限定整串完全匹配,避免前后携带多余字符也能通过校验 - 已经去掉你原枚举列表中重复的CRMG项
- 后续新增XXXX、ZZZZ枚举值时,直接在对应括号内用
|分隔新增项即可
内容的提问来源于stack exchange,提问作者Norbert_Weber
相关产品推荐
相关产品推荐

