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

 更新时间:2024年05月11日 11:38:33   作者:wangyanglongcc  
正则表达式是一种强大的字符串匹配工具,我们可以使用它来校验日期格式是否合法,这篇文章主要给大家介绍了关于常用日期格式正则表达式详解的相关资料,需要的朋友可以参考下

第一步,验证年份

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

总结 

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

相关文章

  • Python正则表达式之基础篇

    Python正则表达式之基础篇

    正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。这篇文章主要介绍了Python正则表达式之基础篇的相关资料,需要的朋友可以参考下
    2016-01-01
  • 如何实现正则表达式的JavaScript的代码高亮

    如何实现正则表达式的JavaScript的代码高亮

    这篇文章主要介绍了如何实现正则表达式的JavaScript的代码高亮方法,需要的朋友可以参考下
    2014-05-05
  • JavaScript正则表达式验证中文实例讲解

    JavaScript正则表达式验证中文实例讲解

    JavaScript经常会验证中文本文将提供使用正则表达式实现,接下来介绍两个实例,感兴趣的你可不要错过了哈,希望本例知识点可以帮助到你
    2013-02-02
  • javascript 基于正则表达式的文本框验证代码

    javascript 基于正则表达式的文本框验证代码

    js验证文本框内容,以前jb51.net提供过不少是基于js函数版本的,这里提供一些正则表达式版本,大家学习归学习,最好是基于函数的绑定操作。代码分离技术。
    2009-12-12
  • 正则表达式RegExp语法与用法详解

    正则表达式RegExp语法与用法详解

    正则表达式是一个描述字符模式的对象,当检索某个文本时,可以使用一种模式来描述要检索的内容,RegExp就是这种模式,下面这篇文章主要给大家介绍了关于正则表达式RegExp语法与用法的相关资料,需要的朋友可以参考下
    2022-10-10
  • 自动检测数字替换非数字的正则表达式

    自动检测数字替换非数字的正则表达式

    这篇文章主要介绍了自动检测数字替换非数字的正则表达式 ,需要的朋友可以参考下
    2016-05-05
  • ip138中各种客户端验证js代码

    ip138中各种客户端验证js代码

    包括ip验证,身份证验证,手机号码验证,电话号码,邮政编码验证,域名验证等,其实好的代码,都在应用中,大家多去扒代码吧。
    2009-12-12
  • 揭开正则表达式的神秘面纱(regexlab出品)

    揭开正则表达式的神秘面纱(regexlab出品)

    正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解,之所以很多人感觉正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难
    2020-02-02
  • javascript下一个还原html代码的正则

    javascript下一个还原html代码的正则

    javascript下一个还原html代码的正则...
    2007-08-08
  • php与javascript正则匹配中文的方法分析

    php与javascript正则匹配中文的方法分析

    这篇文章主要介绍了php与javascript正则匹配中文的方法,结合实例形式分析了针对utf-8与GBK编码情况下的php、javascript正则匹配中文操作技巧,需要的朋友可以参考下
    2017-03-03

最新评论