如何修改HTML5日期正则表达式,限制年份范围为1918-2004?
调整DD.MM.YYYY日期正则,限制年份在1918-2004之间
嘿,这个问题其实只要精准拆解年份的范围,替换掉原正则里的年份匹配部分就搞定啦!我帮你一步步理清楚:
首先,先回顾下你原有的正则核心逻辑:它已经处理了日期的合法性(比如30号不能是二月,31号只能在特定月份),现在只需要把年份从19/20开头的任意两位数字,改成严格的1918-2004区间。
年份范围拆解
我们把1918-2004拆成两个子区间来匹配:
- 1918-1999:以
19开头,后面的两位数字范围是18到99。对应的正则是19(?:1[89]|[2-9]\d)1[89]匹配18、19[2-9]\d匹配20到99的所有两位数
- 2000-2004:以
200开头,最后一位是0到4。对应的正则是200[0-4]
整合后的完整正则
把原正则里的(?:19|20)[0-9]{2}替换成上面的年份组合,最终的正则如下:
(?:(?:0[1-9]|1[0-9]|2[0-9])\.(?:0[1-9]|1[0-2])|(?:30)\.(?:(?!02)(?:0[1-9]|1[0-2]))|(?:31)\.(?:0[13578]|1[02]))\.(?:19(?:1[89]|[2-9]\d)|200[0-4])
快速验证几个案例
- ✅ 15.05.1918(符合年份下限)
- ✅ 31.12.1999(19区间的年份上限)
- ✅ 29.02.2004(20区间的年份上限,注:原正则未校验闰年,若需严格判断二月29号的合法性,还需额外调整规则)
- ❌ 01.01.1917(低于年份下限)
- ❌ 01.01.2005(高于年份上限)
小提醒
正则验证日期虽然便捷,但对于闰年这类特殊场景,原正则目前是允许所有二月29号的。如果需要更精准的日期校验,还得针对闰年逻辑细化二月的匹配规则,但这已经超出你当前的年份限制需求啦~
内容的提问来源于stack exchange,提问作者kibus90
相关产品推荐
相关产品推荐

