我想验证用户使用带有javascript的正则表达式输入的日期值的格式。
我的正则表达式不允许'/'
字符/[^0-9\.]/g,''
但我想让'/'
通过正则表达式测试。我需要做什么修改?
答案 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))$
答案 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
来匹配单个非单词字符作为匹配/
的变通方法。您确定不能使用转义斜杠\/
吗?