如何调整自定义日期验证正则,将年份设为必填4位数字?
实现必填4位年份的日期验证正则表达式
没问题,我帮你把正则里的年份部分改成必填的4位数字,同时保留你之前设定的规则(仅用-分隔、月份为数字)。
修改后的完整正则表达式
^(?:(?:31(-)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(-)(?:0?[13-9]|1[0-2])\2))(?:1[6-9]|[2-9]\d)\d{2}$|^(?:29(-)(?:0?2)\3(?:(?:1[6-9]|[2-9]\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))$|^(?:0?[1-9]|1\d|2[0-8])(-)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:1[6-9]|[2-9]\d)\d{2}$
关键修改点
原正则里的年份部分是(?:(?:1[6-9]|[2-9]\d)?\d{2}),其中的?表示前面的两位前缀是可选的,这就导致允许两位年份(比如01-01-99)。我把这个?直接去掉,改成(?:1[6-9]|[2-9]\d)\d{2},强制要求年份必须是4位,范围覆盖1600-9999(这个范围适配绝大多数实际场景,如果你需要调整年份区间可以随时说)。
规则细节说明
- 仅允许
-作为日期分隔符,且整个日期里的分隔符必须完全一致(比如不能出现01-02/2024这种混合分隔的情况) - 月份支持带前导零(
01)或不带(1),范围严格限制在1-12之间 - 日期逻辑完全贴合实际日历:
- 31天的月份(1、3、5、7、8、10、12)允许输入31日
- 30天的月份(4、6、9、11)最多只能输入30日
- 2月默认最多28日,闰年时允许输入29日(闰年规则:能被4整除但不能被100整除,或者能被400整除)
- 年份必须是完整的4位数字,彻底禁止两位年份的输入
测试示例
✅ 合法日期:31-12-2024、29-02-2020、05-03-1999、1-9-1600
❌ 非法日期:31-04-2024(4月没有31日)、29-02-2023(2023不是闰年)、01-01-99(两位年份)、01/01/2024(使用了/分隔符)
内容的提问来源于stack exchange,提问作者Guilherme Maciel
相关产品推荐
相关产品推荐

