谁有js日期正则表达式,要那种功能比较强大一点的,时间格式是“YYYY-MM-DD”,最好有JavaScript例子

如题所述

最简单的正则 如 : \d{4}-\d{2}-\d{2}
但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....

对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。

UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。

先考虑与年份无关的前三条规则,年份可统一写作

(?!0000)[0-9]{4}

下面仅考虑月和日的正则

1. 包括平年在内的所有年份的月份都包含1-28日

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

2. 包括平年在内的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起来就是除闰年的2月29日外的其它所有日期

(?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

接下来考虑闰年的实现

1 : 四年一闰
([0-9]{2}(0[48]|[2468][048]|[13579][26])

2 : 百年不闰,四百年再闰
(0[48]|[2468][048]|[13579][26])00

3 : 合起来就是所有闰年的2月29日
([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则

^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$

参考资料:http://zhidao.baidu.com/question/125006373.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-18
(1[89]\d\d|2[01][01]\d)-(1[0-2]|0\d)-([0-2]\d|3[01])
这个基本能匹配从1800到2119年的符合基本年月日规格的日期,但是却不能准确的匹配闰年月份,或者大月小月的日期,正则来判断日期不是最好的选择。

...时间格式是“YYYY-MM-DD”,最好有JavaScript例子
)00)-02-29)考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1...

JS怎么用正则表达式判断输入的日期格式为 yyyy-mm-dd
\/^\\d{4}\\-\\d{2}\\-\\d{2}$\/ 这里只是限制了格式必须是yyyy-mm-dd ,如果想做的年月日校验很精准,那比较麻烦!

求一js正则表达式验证YYYY\/MM\/DD格式日期。
\/*日期验证dd\/mm\/yyyy*\/ functionisDate(str){ vardate=str;varresult=date.match(\/^([0]?[1-9]|[1|2][0-9]|[3][0|1])[\/]([0]?[1-9]|[1][0-2])[\/]([0-9]{4}|[0-9]{2})$\/);if(result==null)returnfalse;vard=newDate(result[3],result[2]-1,result[1]);...

js 中匹配 日期的正则表达式 格式是yyyy-MM-dd的格式,求助
\/^\\d{4}[-]\\d{2}[-]\\d{2}$\/

ASP.NET中的如何使文本框中输入8位数时自动变成日期格式YYYY-MM-DD
你可以用控件:正则表达式控件或者如果你有数据库的东西lptx可以用个文本框不显示然后用对比控件

js 格式化字符串为时间yyyy-MM-dd
var s='2017-05-24 12:33:22';'定义日期字符串s=s.replace(\/ \\d+(:\\d+){2}\/,'')'正则过滤后面的时间,只显示年月日alert(s) '弹出日期效果图如下:定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。返回值 一个新的字符串,是用...

js正则表达式验证时间格式yyyy\/MM\/dd HH:mm
\/^\\d{4,}\\\/(?:0?\\d|1[12])\\\/(?:[012]?\\d|3[01]) (?:[01]?\\d|2[0-4]):(?:[0-5]?\\d|60)$\/.test('2015\/11\/3 12:24')

js验证日期格式?yyyy-mm-dd 18:23 这种何解?越简单越好。谢谢可爱的你...
第二步,创建一个date对象实例,然后把以上时间分割并转换为数字然后设置进去,然后比较一下字符串是不是相等。怎么切开字符串我就不写了,很容易的。时间比较的方法如下:var date = new Date();date.setFullYear(2013, 2 - 1, 29); \/\/js用0表示1月,所以月份-1,3个参数分别是年月日date....

js 用正则表达式判断时间格式
var z=\/([0-1]\\d)|2[0-3]:(([0-5]\\d)|60)\/;alert (z.test(str));

...出出生日期必须大于1993年,日期格式为 (yyyy-mm)。
取出数据在js中如果是这样的 var date = yyyy-mm;var checkdate = date.substring(0,date.length-3);\/\/ if(checkdate-1993<0){ ...} else{ ...} date表示你取出来的数据,if语句中的...表示你不让它显示的代码,else里面的...表示让信息在软件表格里显示出来的代码,因为不知道你的JSP其...

相似回答