zoukankan      html  css  js  c++  java
  • 记一种验证日期格式的正则表达式

    工作中经常需要对用户输入的日期进行验证,常用的方式是使用正则对格式进行验证。比如如下:

    一、简单的日期判断(YYYY/MM/DD):

      ^d{4}(-|/|.)d{1,2}1d{1,2}$

    二、演化的日期判断(YYYY/MM/DD| YY/MM/DD):

      ^(^(d{4}|d{2})(-|/|.)d{1,2}3d{1,2}$)|(^d{4}d{1,2}d{1,2}$)$

    三、加入闰年的判断的:

      ^((((1[6-9]|[2-9]d)d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]d|3[01]))|(((1[6-9]|[2-9]d)d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]d|30))|(((1[6-9]|[2-9]d)d{2})-0?2-(0?[1-9]|1d|2[0-8]))|(((1[6-9]|[2-9]d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$

    ...

    诸如此类。

    实际上仅仅对字符串做验证,并不严密,而且费力。

    下面介绍一种结合正则和日期函数的验证方式:

            /**
             * 验证日期格式
             * @param date
             * @return {boolean}
             */
            function checkDate(date) {
                var result = date.match(/^(d{1,4})(-|/)(d{1,2})2(d{1,2})$/);
    
                if (result == null)
                    return false;
                var d = new Date(result[1], result[3] - 1, result[4]);
                return (d.getFullYear() == result[1] && (d.getMonth() + 1) == result[3] && d.getDate() == result[4]);
            }

    利用正则验证后的结果尝试构造日期,然后一一对比。如果构造失败或对比结果有不同的,则验证不通过。

  • 相关阅读:
    Java内存区域
    spring学习之Bean
    记一次日本公司的Java面试
    java中打印输出数组内容的三种方式
    Java创建子类时构造器执行顺序
    转发&重定向
    Java继承
    GXOI&GZOI
    LCT能干啥???
    后缀自动机的一些应用
  • 原文地址:https://www.cnblogs.com/guyezhai/p/6729663.html
Copyright © 2011-2022 走看看