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

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

第一步,验证年份

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

相关推荐

PHP利用正则表达式批量匹配替换网址示例代码详解
在Web开发中,处理URL替换是常见需求(如内容迁移、链接修复、敏感信息过滤等)。PHP作为服务器端主力语言,结合正则表达式可高效实现批量网址匹配替换。本文ZHANID工具网通过...
2025-06-09 编程技术
268

正则表达式空格的几种匹配及去除方法详解
在文本处理中,空格看似简单却暗藏玄机。从数据清洗到代码格式化,从自然语言处理到日志分析,正确匹配和去除空格是高频需求。本文ZHANID工具网将系统解析正则表达式中空格的...
2025-05-30 编程技术
288

python中正则表达式?: ?= ?! 的用法详解
在Python编程中,正则表达式是一种强大的工具,用于字符串匹配和搜索。随着Python版本的更新,正则表达式的功能不断扩展,特别是非捕获组(?:)、正向前瞻断言(?=)和负向前瞻断...
2025-04-18 编程技术
428

掌握Xcode中的正则表达式查找与替换技巧
在现代软件开发过程中,代码的查找与替换是一项频繁且重要的任务。Xcode作为苹果公司推出的集成开发环境,提供了强大的查找与替换功能,尤其是支持正则表达式的查找与替换,使...
2025-01-31 编程技术
313

JS实现Date()日期格式化的3种常用方法
在Web开发中,日期和时间的处理是一个常见的任务。JavaScript提供了内置的Date对象来处理日期和时间,但默认的日期格式往往不符合我们的需求。为了满足各种应用场景,我们需要...
2024-12-30 编程技术
568

Python 正则表达式 re.findall() 函数用法详解
在数据处理和文本分析中,正则表达式是一种强大的工具,可以用来匹配、查找和替换字符串中的特定模式。Python 的re模块提供了丰富的正则表达式功能,其中re.findall()函数是常...
2024-12-08 编程技术
446