当前位置:  开发笔记 > 编程语言 > 正文

javascript regexp,验证日期问题

如何解决《javascriptregexp,验证日期问题》经验,为你挑选了1个好方法。

我有一些验证日期的代码如下:

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",
但是当我放入无效数据并尝试纠正它时它会破坏验证,它会一直抱怨某些东西在我纠正它们之后错误的表单值(特别是在具有多个输入的表单上)

也许有人可以修复当前的正则表达式?


编辑,我只想简单替换上面的regexp,意味着一个新的正则表达式模式而不是验证日期的全新方法
.作为参考,我只需从
http://www.regexlib.com/REDetails获取正则表达式模式. aspx?regexp_id = 694和
http://www.regexlib.com/REDetails.aspx?regexp_id=933

测试了2009-02-29,第一个链接工作和第二个没有.再次问题是第二个正则表达式没有检测到值2009-02-29无效而第一个可以(但它毁了我的代码?所以它一定是有问题).

谢谢,
Dels



1> David Z..:

不要使用正则表达式进行整个日期验证,这确实推动了正则表达式设计的极限.我会建议这个程序:

    检查日期与正则表达式 /^\d{4}-\d{2}-\d{2}$/

    使用substr()和转换为整数提取年,月和日

    使用一些if语句来验证整数.像这样:

    if (month == 2) {
        if (day == 29) {
            if (year % 4 != 0 || year % 100 == 0 && year % 400 != 0) {
                // fail
            }
        }
        else if (day > 28) {
            // fail
        }
    }
    else if (month == 4 || month == 6 || month  == 9 || month == 11) {
        if (day > 30) {
            // fail
        }
    }
    else {
        if (day > 31) {
            // fail
    }

(当然可以更简洁地编写)或者,您可以使用Javascript的Date类执行此验证- 您可能需要执行诸如解析日期,将其转换回字符串以及检查两个字符串是否相等的操作.(我不是Javascript专家)

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有