常用日期格式正则表达式详解(完善版)
第一步,验证年份
年份范围为 0001 - 9999,匹配YYYY的正则表达式为:
[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}
第二步,验证月份和日期
1. 月份为[1, 3, 5, 7, 8, 10, 12],天数范围为01-31
匹配MM__sep__DD的正则表达式为:
(0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01])
2. 月份为[4, 6, 9, 11],天数范围为01-30
匹配MM__sep__DD的正则表达式为:
(0[469]|11)__sep__(0[1-9]|[12][0-9]|30)
3. 月份为2月
3.1 平年,2月为01-28
02__sep__(0[1-9]|[1][0-9]|2[0-8])
3.2 闰年,2月为01-29
由于上面已经把2月01-28都包含了,所以这里只需要把2月29号匹配出来即可
1. 能被4整除,但不能被100整除
前两位不需要考虑,后两位能被4整除只有以下3种情况:
- ①十位为0,个位为[4,8]
- ②十位为[2,4,6,8],个位为[0,4,8]
- ③十位为[1,3,5,7,9],个位为[2,6]
则年份正则表达式为:
([0-9]{2})(0[48]|[2468][048]|[13579][26])
YYYY__sep__MM__sep__DD:
([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29
2. 能被400整除
首先,能被400整除,后两位一定是00,则只需要保证前两位能被4整除。
前两位能被4整除只有以下3种情况:
- ①千位为0,百位为[4,8]
- ②千位为[2,4,6,8],百位为[0,4,8]
- ③千位为[1,3,5,7,9],百位为[2,6]
则年份正则表达式为:
(0[48]|[2468][048]|[13579][26])00
YYYY__sep__MM__sep__DD:
(0[48]|[2468][048]|[13579][26])00__sep__02__sep__29
结论:
- 平年
增加缩进,方便理解
([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})
__sep__
(
((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))
|
((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))
|
(02__sep__(0[1-9]|[1][0-9]|2[0-8]))
)
直接使用,方便复制替换
([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})__sep__(((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))|(02__sep__(0[1-9]|[1][0-9]|2[0-8])))

- 闰年
增加缩进,方便理解
(([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)
|
((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29)
直接使用,方便复制替换
(([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)|((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29)

- 平年和闰年合并
根据上述1和2,可以得出一个匹配合法日期的正则表达式(不区分平年和闰年)
增加缩进,方便理解
(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})
__sep__
(
((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))
|
((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))
|
(02__sep__(0[1-9]|[1][0-9]|2[0-8]))
))
|
((([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)
|
((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29))
直接使用,方便复制替换
(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})__sep__(((0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)__sep__(0[1-9]|[12][0-9]|30))|(02__sep__(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])__sep__02__sep__29)|((0[48]|[2468][048]|[13579][26])00__sep__02__sep__29))

附:日期计算
JS的正则表达式还可以用来进行日期计算。下面是一个计算两个日期之间相差天数的例子:
function dateDiff(startDate, endDate){ let start = new Date(startDate); let end = new Date(endDate); let diff = end.getTime()- start.getTime(); return Math.floor(diff /(24 * 3600 * 1000));}console.log(dateDiff('2023-04-01','2023-05-01'));//输出30总结
到此这篇关于常用日期格式正则表达式的文章就介绍到这了,更多相关日期格式正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
UNIX/LINUX SHELL 正则表达式语法详解附使用方法
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配2019-11-11
SQL正则表达式错误 “parentheses not balanced“ 问题
在实际开发中,数据库查询经常需要使用正则表达式(REGEXP)来筛选复杂条件下的数据,然而,一些开发者在操作中可能会遇到类似以下错误parentheses not balanced,所以本文给大家介绍了SQL正则表达式错误 “parentheses not balanced“ 问题的排查和解决方案2024-12-12


最新评论