`

Javascript 日期校验完备全过程

阅读更多

    在原来公司的项目组工作的过程中,自己实现了一个用于校验用户输入数据合法性的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即可。

分享到:
评论

相关推荐

    网上企业OA系统论文

    完备性意味着系统覆盖了预算管理的全过程。而可靠性则是系统稳定运行的基础,通过数据校验确保数据的正确性。 在工作内容和要求部分,论文提到系统被划分为基本信息、部门预算、项目管理和系统管理四个模块。作者...

    基于Java核心的halo开源建站工具设计源码

    在Halo建站工具中,这些JavaScript文件可能负责处理前端逻辑、数据校验、用户输入处理等。 除了Java和JavaScript文件之外,项目还包括11个CSS文件和11个FreeMarker模板文件。CSS文件用于定义网站的样式,确保网站的...

    JSP网络购物中心毕业设计(源代码+论文).zip

    【标题】JSP网络购物中心毕业...通过学习这个JSP网络购物中心毕业设计,不仅可以提升Web开发技能,还能了解一个完整的电商项目从概念到实现的全过程。无论是对在校学生还是在职开发者,都是一个宝贵的实战学习资源。

    基于Vue的医生端APP设计源码

    例如,ESLint可以检测代码中的问题,Prettier可以对代码进行格式化,Stylelint则专注于样式的校验,而Babel配置则确保了代码的兼容性。 该项目是一个功能完备、技术栈现代、配置齐全的医生端移动应用,它不仅可以...

    个人博客系统JSP课程设计

    综上,"个人博客系统JSP课程设计"是一个综合性的Java Web开发项目,涵盖了从用户界面到后端服务的全过程,对于学习和掌握Web开发技术具有很高的实践价值。通过这个项目,开发者可以深入理解JSP、MVC架构、Spring框架...

    订花系统(.net开发)

    综上所述,这个网上订花系统采用.NET技术栈,结合数据库设计,实现了从用户浏览、选购、支付到订单处理的全过程,不仅简化了购花流程,也为商家提供了高效管理工具。随着技术的不断进步,相信这类系统将更加智能化、...

    chat-layui:贤心 layui 即时聊天

    3. **WebSocket通信**:JavaScript的WebSocket API是"chat-layui"实现即时通讯的关键,通过new WebSocket()创建连接,onopen、onmessage、onerror、onclose等事件处理通信的全过程。 4. **AJAX请求**:在用户登录、...

    预订系统:预订系统后端

    在构建一个预订系统后端的过程中,JavaScript作为主要的编程语言起着至关重要的作用。JavaScript,通常与前端开发关联,但也可以用于服务器端编程,尤其是在Node.js环境中。本篇将深入探讨如何利用JavaScript来构建...

    新版在线考试

    总结来说,新版在线考试系统利用JSP和Struts框架构建了一个功能完备、安全可靠的在线考试平台,涵盖了考试创建、管理、参与的全过程。其背后的技术细节包括数据库设计、前端开发、安全措施和性能优化,这些都是IT...

    影院售票系统(部分代码)

    【影院售票系统】是计算机应用领域中常见的案例,主要用于模拟现实生活中电影院的售票流程,包括...开发过程中,不仅要有扎实的编程基础,还需要掌握软件工程的全生命周期管理,包括需求分析、设计、编码、测试和维护。

    php制作在线考试系统

    在构建一个PHP在线考试系统的过程中,我们需要关注多个关键知识点,这些知识点涵盖了系统设计、数据库管理、用户交互以及安全措施等方面。下面将详细阐述这些要点。 1. **系统架构设计** 在线考试系统通常采用三层...

Global site tag (gtag.js) - Google Analytics