使用正则表达式以dd / mm / yyyy验证日期格式

时间:2015-04-14 10:43:28

标签: javascript regex

我想验证用户使用带有javascript的正则表达式输入的日期值的格式。

我的正则表达式不允许'/'字符/[^0-9\.]/g,''

但我想让'/'通过正则表达式测试。我需要做什么修改?

4 个答案:

答案 0 :(得分:2)

this answer修改后,您可以非常精确地使用此功能。这适用于 1000-9999 Proleptic Gregorian ,并假设我们不会改变闰年的工作方式,直到9999年;)

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

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

"20/11/1992".match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)

上面的代码片段应该可以,但是在日期上执行的验证太多,所以我不推荐正则表达式。

相反,我会像大多数网站一样做并放置3个组合框(dd / mm / yyyy),并允许用户选择日期,然后使用{{3}验证该日期(如果值没有改变,则日期正确)。

注意:答案是基于您不想使用任何现有库(或使用input[type="date"]时浏览器提供的本机验证)的假设

答案 2 :(得分:0)

您可以使用此正则表达式:

/(^(((0[1-9]|[12][0-8])[\/](0[1-9]|1[012]))|((29|30|31)[\/](0[13578]|1[02]))|((29|30)[\/](0[4,6,9]|11)))[\/](19|[2-9][0-9])\d\d$)|(^29[\/]02[\/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)/

这将使用格式dd/mm/yyyy验证日期,并检查闰年。

答案 3 :(得分:0)

这取决于你需要多严格?我很简单:

/[0-3]\d\W[01]\d\W(?>19|20)\d{2}/g

应该足够了。

天:[0-3]\d 2位数字,首先是0-3,其次是任意数字\d

月:[01]\d 2位数字,第一个0或1,第二个任意数字

年:(?>19|20)\d{2} 4位数字,以19或20(19世纪和20世纪)开头,接下来任意数字两次{2}

另请注意,我使用\W来匹配单个非单词字符作为匹配/的变通方法。您确定不能使用转义斜杠\/吗?