Java正则表达式无法兼容校验yyyy-MM-dd格式日期如何解决
正则兼容调整方案
问题原因
原有正则的允许字符集未覆盖横杠-,且未对yyyy-MM-dd结构做专属匹配,直接把横杠加入通用字符集会导致非法带横杠的字符串被误匹配。
调整后正则
宽松兼容版(支持日期与其他格式自由组合)
^((\d{4}-\d{2}-\d{2})|([0-9A-WYZa-wyz -]+))([xX|]((\d{4}-\d{2}-\d{2})|([0-9A-WYZa-wyz -]+)))?$
严格约束版(仅允许标准yyyy-MM-dd格式出现横杠,避免非法串误放行)
^(\d{4}-\d{2}-\d{2}|[0-9A-WYZa-wyz ]+)([xX|](\d{4}-\d{2}-\d{2}|[0-9A-WYZa-wyz ]+))?$
调整说明
- 新增
\d{4}-\d{2}-\d{2}专属匹配分支,优先识别yyyy-MM-dd结构的标准日期,不会破坏原有规则对10JUN2022、2Mx1D、4M、1D、TEN、ONE|TEN等格式的匹配能力 - 严格版不会匹配
a-b-c这类随意带横杠的非法字符串,仅当字符串符合4位数字+横杠+2位数字+横杠+2位数字的日期结构时,才会允许横杠存在 - 两个版本都支持分隔符
x/X/|两侧的内容自由选择原有格式或新日期格式,比如2022-06-10|1D、4Mx2022-06-10这类组合场景也可正常校验
匹配效果验证
- 原有格式全部正常匹配:
10JUN2022、2Mx1D、4M、1D、TEN、ONE|TEN - 新增日期格式正常匹配:
2022-06-10 - 严格版会拦截非法带横杠串:
202-06-10、A-B-C、2022-6-1
内容的提问来源于stack exchange,提问作者dilipyadav
相关产品推荐
相关产品推荐

