如何基于正则表达式验证CPR有效性?现有正则匹配全部失败求助
CPR正则验证修复方案
你的正则表达式核心问题是长度匹配错误,导致所有9位CPR都无法通过验证:
原正则里的前半段(([8-9][0-9]|[0-1][0-9]|2[0-3]){2})多了一个{2}量词,这会强制匹配4位数字作为年份部分,加上月份2位和最后5位,总长度变成11位,完全不符合CPR的9位要求。
修正后的正则表达式
^([8-9]\d|0\d|1\d|2[0-3])(0[1-9]|1[0-2])\d{5}$
各部分说明
^与$:严格限定字符串首尾,避免匹配包含9位CPR的更长文本([8-9]\d|0\d|1\d|2[0-3]):精准匹配1980-2023年对应的年份后两位:[8-9]\d:覆盖80-99(对应1980-1999)0\d|1\d:覆盖00-19(对应2000-2019)2[0-3]:覆盖20-23(对应2020-2023)
(0[1-9]|1[0-2]):匹配合法月份01-12\d{5}:匹配任意5位数字作为最后一段
测试示例
- 有效CPR:
800412233(匹配1980年4月)、231299999(匹配2023年12月) - 无效CPR:
240112345(年份24超出范围)、801312345(月份13不合法)、80041234(长度不足9位)
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

