正则表达式匹配日期,支持闰年,格式为YYYYMMDD

年份:[\d]{4}

带31的月份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01]))

非2月不带31日的月份:((0[469])|11)((0[1-9])|([12][1-9])|30)

平年2月份 : 02((0[1-9])|(1[0-9])|(2[1-8]))

闰年2月份:02((0[1-9])|(1[0-9])|(2[1-9]))

闰年月份:

((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))

平年月份:

((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))

平年年份和月份,这个月份2月只有28号,如果出现0229这种日期就交给闰年带月份的正则表达式进行匹配,2个表达式用或连接

[\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8]))))

闰年年份:

第一种:能被100整除,也能被400整除 0400 0800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400 6800 7200 7600 8000 8400 8800 9200 9600

(([02468][048])|([13579][26]))00

第二种 :不能被100整除,但能被4整除 04 08 12

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

闰年年份和月份:

(((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))))

总表达式:

([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))))

一定要注意正则表达式连接起来的时候每个正则表达式都要在外层加个括号,这样就能保证连接起来的时候优先级不会改变,虽然这个整个表达式一眼看省去很难看,但是还是能达到验证的目的的,时间有限,就没去优化了,我估计还是有优化的空间的,我做这个,只是为了判断一个文件的文件名的名称是否合法,这个文件的名字中就带有日期,所以。。。。

原文:https://blog.csdn.net/lu188887/article/details/7421857

原文地址:https://www.cnblogs.com/ParanoiaApe/p/10196509.html

时间: 2024-11-02 19:49:38

正则表达式匹配日期,支持闰年,格式为YYYYMMDD的相关文章

在 Visual Studio 或 SQLServer Management Studio 的代码编辑器中使用正则表达式匹配日期格式

使用正则查找时间格式文本 VS正则: (:z表示数字) ':z-:z-:z :z[\:]:z[\:]:z'

正则表达式匹配日期时间

正则表达式 (?n:^(?=\d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(?(.0?2)(?=.{3,4}(1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00))|0?[1-9]|1\d|2[0-8])(?<sep>[/.-])(?<month>0?[1-9]|1[012])\2(?<year>(1[6-9]|[

获取当前的日期时间的js函数,格式为“yyyy-MM-dd hh:mm:ss”

1 //获取当前的日期时间函数,格式为"yyyy-MM-dd hh:mm:ss" 2 function getNowFormatDate(date) { 3 if (date == null) { 4 var date = new Date(); 5 } 6 var seperator1 = "-"; 7 var seperator2 = ":"; 8 var month = date.getMonth() + 1; 9 if (month &g

常用SQL时间格式SQLServer中文版的默认的日期字段datetime格式是yyyy-mm-d

常用SQL时间格式 SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 2004-09-12 11:06:08.177 这对于在要不同数据库间转移数据或者习惯oracle日期格式YYYY-MM-DD HH24:MI:SS的人多少有些不方便. 我整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(),

正则表达式验证日期(多种日期格式)——转载

1.概述 首先需要说明的一点,无论是 Winform ,还是 Webform ,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好. 前几天在 CSDN 多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正. 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用.因应用场景的不同,写出的正则也不同,复杂程度也自然不同.正则的书写需要根据具体情况具体分析,一个基本原则就 是:只写合适的,不写复杂

日期合法性验证(格式为:YYYY-MM-DD或YYYY/MM/DD )

//+---------------------------------------------------  //| 日期合法性验证  //| 格式为:YYYY-MM-DD或YYYY/MM/DD  //+---------------------------------------------------  function IsValidDate(DateStr)   {       var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格;

js获取上一个月、下一个月格式为yyyy-mm-dd的日期

/** * 获取上一个月 * * @date 格式为yyyy-mm-dd的日期,如:2014-01-25 */ function getPreMonth(date) { var arr = date.split('-'); var year = arr[0]; //获取当前日期的年份 var month = arr[1]; //获取当前日期的月份 var day = arr[2]; //获取当前日期的日 var days = new Date(year, month, 0); days = da

求两个时间的天数差 日期格式为 YYYY-MM-dd

//+---------------------------------------------------  //| 求两个时间的天数差 日期格式为 YYYY-MM-dd   //+---------------------------------------------------  function daysBetween(DateOne,DateTwo)  {       var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-

日期时间检查(格式为:YYYY-MM-DD HH:MM:SS)

//+---------------------------------------------------  //| 日期时间检查  //| 格式为:YYYY-MM-DD HH:MM:SS  //+---------------------------------------------------  function CheckDateTime(str)  {       var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1