Javascript 使用正则表达式验证dd/mm/yyyy中的日期格式
我想验证用户使用带有javascript的正则表达式输入的日期值的格式 我的正则表达式不允许使用Javascript 使用正则表达式验证dd/mm/yyyy中的日期格式,javascript,regex,Javascript,Regex,我想验证用户使用带有javascript的正则表达式输入的日期值的格式 我的正则表达式不允许使用'/'字符,/[^0-9\.]/g', 但是我想让'/'也通过正则表达式测试。我需要在此处进行哪些修改?您可以使用此正则表达式: /(^(((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[\/
'/'
字符,/[^0-9\.]/g',
但是我想让
'/'
也通过正则表达式测试。我需要在此处进行哪些修改?您可以使用此正则表达式:
/(^(((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
格式验证日期,并检查闰年
"20/11/1992".match(/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/)
上面的代码段应该可以,但是有太多的验证需要在日期上执行,所以我不推荐使用正则表达式
相反,我建议像大多数网站一样,放置3个组合框(dd/mm/yyyy),允许用户选择一个日期,然后使用验证该日期(如果值没有更改,则日期是正确的)
注意:答案基于您不想使用任何现有库的假设(或使用
输入[type=“date”]
时浏览器提供的本机验证)这取决于您需要的严格程度?我觉得事情很简单:
/[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
来匹配单个非单词字符,作为匹配/
的变通方法。您确定不能改用转义斜杠吗?从中修改后的斜杠可以非常准确地使用它。这适用于1000-9999年,即,并且假设我们在9999年之前不会改变闰年的工作方式;)
也许可以将/字符作为允许的字符添加到regexp中?您可以使用以下命令:^([0-2]{1}[0-9]{1}|(30 | 31))\/(0[0-9]{1}|(10 | 11 | 12))\/[0-9]{4}$Nice Twist与leapyear一起使用,当然,通过图像很容易理解follow@winner_joiner是的,我是debuggex可视化的超级粉丝。在处理像这样庞大的正则表达式时,这是一个巨大的帮助。如果你点击网站上正则表达式文本的某个地方,它实际上会显示你在视频中的位置,这就是我如何快速找到在哪里添加
/
的方法。真是太棒了!我刚刚发现了一个bug-它与10
不匹配,因为存在模式[01][1-9]
。所以我们还需要一个案例(?:0[1-9]| 1\d)
–@Vaclav nice find!我添加了它,但没有附加分组:)谢谢。。。。干得好!!
^(?:(?:(?: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))$