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

wangyanglongcc 2024-05-13 16:16:36编程技术
73

第一步,验证年份

年份范围为 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])))

日期正则表达式测试.png

  • 闰年

增加缩进,方便理解

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

日期正则表达式测试2.png

  • 平年和闰年合并

根据上述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))

日期正则表达式测试3.png

附:日期计算

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

工具推荐

  1. 正则表达式测试工具:https://www.zhanid.com/tool/regex_test.html

  2. 正则表达式生成器:https://www.zhanid.com/tool/regex_generate.html

总结 

到此这篇关于常用日期格式正则表达式的文章就介绍到这了,更多相关日期格式正则表达式内容请搜索站长工具网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站长工具网!

正则表达式 正则
THE END
colg

相关推荐

解析MySQL中将字符串转换为日期格式的多种方法
在数据库操作中,日期格式的处理是一个常见的任务。特别是在处理历史数据或从外部系统导入数据时,我们经常需要将字符串格式的日期转换为MySQL数据库中的日期格式。本文将详细...
2024-11-10 编程技术
112

正则表达式生成器:站长必备的在线正则代码生成工具
正则表达式是一种强大的工具,用于处理和匹配字符串。然而,编写正则表达式往往具有一定的复杂性和挑战性。正则表达式生成器的出现,为开发者提供了极大的便利。它是一款正则...
2024-10-17 新闻资讯
126

Python使用正则表达式从字符串中提取浮点数实例详解
Python作为一种强大的编程语言,提供了多种方法来处理字符串和数字数据。其中,正则表达式(Regular Expressions)是一种非常实用的工具,可以用来匹配和提取特定模式的文本。...
2024-09-13 编程技术
129

深入解析正则表达式中的小括号、中括号与大括号的功能与用法
正则表达式是文本处理的强大工具,它允许我们匹配、搜索、替换复杂的字符串模式。在正则表达式的语法中,小括号、中括号和大括号各自承担着不同的角色,极大地扩展了正则表达...
2024-08-13 编程技术
136

Notepad++正则表达式实战指南:实例解析与深入理解
通过正则表达式,用户可以在Notepad++中实现高级的文本搜索与替换操作,极大地提高了工作效率。本文旨在通过一系列实用案例,深入浅出地讲解Notepad++中正则表达式的使用方法...
2024-08-13 编程技术
148

python和JavaScript的正则表达式详细使用对比
正则表达式是对字符串提取的一套规则,我们把这个规则用正则里面的特定语法表达出来,去匹配满足这个规则的字符串,这篇文章主要给大家介绍了关于python和JavaScript正则表达式详...
2024-06-16 编程技术
67