标题: Javascript 日期校验完备全过程
- FantasySoft 2004-08-06 08:34 阅读:4585
- 评论:10 查看评论 | 添加评论

    在原来公司的项目组工作的过程中,自己实现了一个用于校验用户输入数据合法性的Javascript Validation Framework。在这个Framework实现的过程中,在参考了一些网上资源之后,自己写了一个日期校验的函数,满心以为这个校验函数已经够完备了,结果还是经历了多次的修改。   

[图片]function validateDate(year, month, day) 
[图片]{
[图片]    var regex = new RegExp(/S/);  
[图片]    if(regex.test(day)&& regex.test(month) && regex.test(year)) 
[图片]    {
[图片]        var regExp = new RegExp(/d/);
[图片]        if(!regExp.test(day)|| !regExp.test(month) || !regExp.test(year))
[图片]            return ("The date fields contains non-number.");
[图片]        var tempDateValue = year + "/" + month + "/" + day;
[图片]        if(tempDateValue.length < 6||tempDateValue.length > 10)
[图片]            return ("The length of date fields is invalid."); 
[图片]        var tempDate = new Date(tempDateValue);
[图片]        if(isNaN(tempDate))
[图片]            return ("The scope of date fields is invalid.");   
[图片]        if(parseInt(year) > 1900 && parseInt(year) < 2500 && ((tempDate.getUTCFullYear
[图片]()).toString()==year) && (tempDate.getMonth()==parseInt(month)-1) && (tempDate.getDate()
[图片]==parseInt(day)))
[图片]            return ("The date fields is OK.");
[图片]        else
[图片]            return ("The date fields is invalid.");
[图片]    }
[图片]}
[图片]
[图片]

                                                           (为了说明问题,代码略有改动)

        1、使用测试数据:year="2003",month="08",day="01"。这原本是一个合法的日期,然而出乎我的意料,返回的信息居然是:The date fields are invalid。根据返回的信息,将错误定位在最后一个条件语句。经过仔细的检查,发现parseInt("08") = 0,条件语句返回自然是false了。为什么parseInt("08")会得到这样的结果呢?原来parseInt在没有指定转化进制的时候,是根据字符串对应的进制进行转换,而以0开头的字符串都默认为八进制的,那么在八进制中8是不存在的,因此返回0也就不奇怪了。修改办法就是将所有的parseInt函数指定进制即可,如parseInt(month)改为parseInt(month,10)。
        2、使用测试数据:year="2000",month="01",day="01"。这个日期也是OK的,然而返回的信息也是:The date fields are invalid。这次的错误又是因为什么呢?原来错误在于getUTCFullYear,由于中国处于时区的东八区,而通过var tempDate = new Date(tempDateValue)获得日期的对象,默认是包含具体的时间,且初始化值为00:00:00。那么在中国是跨入二十一世纪了,可是在格林威治却仍然是1999年,那么出错也是自然的事情了,修改办法是将getUTCFullYear改为getFullYear即可。


查看评论 | 添加评论
返回顶部 | 返回首页