广告位联系
返回顶部
分享到

常用日期格式正则表达式详解(完善版)

正则表达式 来源:互联网 作者:佚名 发布时间:2024-05-12 07:32:17 人浏览
摘要

第一步,验证年份 年份范围为 0001 - 9999,匹配YYYY的正则表达式为: 1 [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],天数范围为

第一步,验证年份

年份范围为 0001 - 9999,匹配YYYY的正则表达式为:

1

[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的正则表达式为:

1

(0[13578]|1[02])__sep__(0[1-9]|[12][0-9]|3[01])

2. 月份为[4, 6, 9, 11],天数范围为01-30

匹配MM__sep__DD的正则表达式为:

1

(0[469]|11)__sep__(0[1-9]|[12][0-9]|30)

3. 月份为2月

3.1 平年,2月为01-28

1

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]

则年份正则表达式为:

1

([0-9]{2})(0[48]|[2468][048]|[13579][26])

YYYY__sep__MM__sep__DD:

1

([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]

则年份正则表达式为:

1

(0[48]|[2468][048]|[13579][26])00

YYYY__sep__MM__sep__DD:

1

(0[48]|[2468][048]|[13579][26])00__sep__02__sep__29

结论:

  • 平年

增加缩进,方便理解

1

2

3

4

5

6

7

8

9

([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]))

)

直接使用,方便复制替换

1

([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])))

  • 闰年

增加缩进,方便理解

1

2

3

(([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

(([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,可以得出一个匹配合法日期的正则表达式(不区分平年和闰年)
增加缩进,方便理解

1

2

3

4

5

6

7

8

9

10

11

12

13

(([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))

直接使用,方便复制替换

1

(([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的正则表达式还可以用来进行日期计算。下面是一个计算两个日期之间相差天数的例子:

1

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计