日期格式验证

日期格式yyyyMMdd正则表达式:

var reg = /^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])|(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))|(((0[48]|[13579][26]|[2468][048])000209)|([0-9]{2}(0[48]|[13579][26]|[2468][048])0209))$/;  //已做测试

用正则表达式如何判断日期yyyyMMdd。日期判断涉及到闰年平年的判断,大月小月的判断等。由于好久没用正则表达式了,所以只能一步一步的来实现日期的判断。最后竟成功了,下面分享一下这个过程。

首先,我想到的是大月的判断。1,3,5,7,8,10,12这几个月都是31天,有相似之处,但是又稍有不同。

(0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])                   //前一个括号是月的判断,后一个括号是日期的判断

测试了一下成功了,接下来进行小月的判断,30天的月份有4,6,9,11。与判断大月基本类似:

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

然后判断2月份,先考虑28天的情况

02(0[1-9]|1[0-9]|2[0-8])

现在月份和日期都判断完了,再考虑年的情况。这里年的范围是0001至9999。判断的正则表达式为:

[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3}< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

然后考虑闰年的情况,闰年又分为两种情况,一种是正百年能够被400整除,另一种是非整百年能被4整除。整百年的情况,主要是前两位:04,08;头一位是偶数的,[2468][048];头一位是奇数的,[13579][26]:

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

另一种闰年的情况,非百年能被4整除的年,主要是考虑后两位能被4整除,与上面的类似也分奇偶:

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

将闰年的合并:

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

现在所有的条件都考虑了,剩下的就是合并了。

不考虑闰年的2月29号的情况:

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

考虑了闰年的2月29号的最终表达式为:

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})((0[13578]|10|12)(0[1-9]|1[0-9]|2[0-9]|3[01])|(0[469]|11)(0[1-9]|1[0-9]|2[0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))|(((0[48]|[13579][26]|[2468][048])000209)|([0-9]{2}(0[48]|[13579][26]|[2468][048])0209

时间: 2024-10-08 11:51:17

日期格式验证的相关文章

利用SQL模糊匹配来验证字段是否是日期格式

最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 '2016-05-03 23:21:35.0', 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后使用了最常规的like来模糊匹配,虽然比不上正则匹配那么精准,但也够用了. 思路: 一个下划线代表一个字符,那'2016-05-03 23:21:35.0'可以表示成'____-__-__-__.__.__.______'. 当然这种办法比较笨,不能识别是数字还是字母还是字符,当然更好的办法是编写U

Js 自定义日期格式的正则表达式验证

截至2017-07-14,下面的脚本还存在不会验证闰年闰月.大小月的情况,大小月.闰年.闰月只能用其他方式验证! var currentFormat="YYYY-MM-dd HH:ss.SSS";//输入常见日期格式 currentFormat = currentFormat //优先替换特殊字符,因为后面替换的正则表达式中包含特殊字符 .replace(/\s/ig, "\\s") .replace(/\//ig, "\\/") .replac

验证日期格式的方法

判断日期格式的验证: 除IE浏览器外,可使用Date.parse()方法,该方法传入某个日期字符串,返回从1970-1-1 00:00:00到该日期对象的毫秒数,若无法识别则返回NaN IE浏览器不支持Date.parse()方法,其解决思路如下: 将字符串手动解析为数组: 使用Date的实例化,即new Date(a,b,c),返回date对象,若无法识别,则返回Invalid Date的对象: 调用对象的toString方法,返回结果值与'Invalid Date'相等,则为不合格日期格式,

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

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

关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题

项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()"就可以用了,但是默认是没有时分秒的,如果需要显示时分秒只需要加上WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})就行. **************************************************************************

★★★【卡法 常用js库】: js汇合 表单验证 cookie设置 日期格式 电话手机号码 email 整数 小数 金额 检查参数长度

[卡法 常用js库]: js汇合 表单验证  cookie设置  日期格式  电话手机号码  email  整数  小数  金额   检查参数长度 // +---------------------------------------------------------------------- // | sunqiang // +---------------------------------------------------------------------- // | Copyrig

使用SimpleDateFormat验证日期格式

Java中日期格式的验证有很多方式,这里介绍用 java.text.SimpleDateFormat 来实现时间验证的一种简单方式.首先我们要知道 SimpleDateFormat 对象有一个方法 void setLenient(boolean lenient) ,此方法传入一个Boolean值,表示是否是宽松的验证.当传入false时候表示验证是严格的.利用这一点我们就可以简单实现一个严格的时间格式验证.实现代码如下: public static boolean validDateTimeSi

PHP 验证日期格式

使用 PHP 正则表达式来匹配日期格式 "YYYY-MM-DD": function checkDateFormat($date) { //匹配日期格式 if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) { //检测是否为日期 if(checkdate($parts[2],$parts[3],$parts[1])) return true; else return fals

java导入excel时处理日期格式(已验证ok)

在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理.正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话, 创建一个日期格式,再将单元格的内容以这个日期格式显示出来.如果单元格不是日期格式,那么则直接得到NUMERIC的值就行了.具体代码如下: