【发布时间】:2010-10-14 06:01:45
【问题描述】:
我有一些验证日期的代码如下:
function validateForm() {
var errFound = 0;
//var patt_date = new RegExp("^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))$");
var patt_date = new RegExp("^[0-9]{4}-(((0[13578]|(10|12))-(0[1-9]|[1-2][0-9]|3[0-1]))|(02-(0[1-9]|[1-2][0-9]))|((0[469]|11)-(0[1-9]|[1-2][0-9]|30)))$");
if (patt_date.test(document.getElementById("datefrom").value) == false){errFound = errFound + 1;document.getElementById("datefrom").className = "error";}
if (errFound > 0)
alert('Please correct red colored field!');
else
return true;
return false;
}
以上代码应适用于 YYYY-MM-DD 格式,但无法验证日期,例如 "2009-02-29"
注释的代码应该可以工作(//var patt_date = new RegExp...),它可以捕获“2009-02-29”,
但是当我输入无效数据并尝试更正它时,它会破坏验证,在我更正它们后它一直抱怨表单值有问题(尤其是在具有多个输入的表单上)
也许有人可以修复当前的正则表达式?
已编辑,我只想简单替换上述正则表达式,意思是新的正则表达式模式而不是验证日期的全新方法
作为参考,我只是从以下位置获取正则表达式模式:
http://www.regexlib.com/REDetails.aspx?regexp_id=694 和
http://www.regexlib.com/REDetails.aspx?regexp_id=933
用 2009-02-29 测试,第一个链接有效,第二个无效。再次问题是,只有第二个正则表达式没有检测到值 2009-02-29 无效,而第一个可以(但它破坏了我的代码?所以它一定有问题)。
谢谢,
德尔斯
【问题讨论】:
-
你能举个例子说明第二个正则表达式应该匹配但不匹配的日期吗?此外,您的第一个(已注释掉的)正则表达式在闰日方面略有错误 - 它假设 1900 年是闰年,而实际上并非闰年。
标签: javascript regex validation