IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    jQuery.maskedinput如何验证日期(处理2月份,支持闰年)

    汪宇杰发表于 2014-06-18 02:15:29
    love 0

    我司的系统里最近发现了一个神奇的现象:

    呵呵呵呵呵。。。。。

    我们用的是jQuery.maskedinput这个插件,插件本身只是为了约束格式,并不做validation。所以我们必须自己搞定。思路很简单,插件提供了completed事件,所以只要在用户输入完成后验证字符串是否为合法日期。重点是一个正则表达式。

    用大微软的bing搜索后发现了一个支持mm/dd/yyyy并可以验证闰年的正则:

    ^((0[13578]|1[02])[\/.]31[\/.](18|19|20)[0-9]{2})|((01|0[3-9]|1[1-2])[\/.](29|30)[\/.](18|19|20)[0-9]{2})|((0[1-9]|1[0-2])[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))$

    对于闰年、非闰年可以正确处理2月28,29。当然2月30,31也是一直不允许的。

    最后我们的HTML:

    JS:

    var dateRegex = /^((0[13578]|1[02])[\/.]31[\/.](18|19|20)[0-9]{2})|((01|0[3-9]|1[1-2])[\/.](29|30)[\/.](18|19|20)[0-9]{2})|((0[1-9]|1[0-2])[\/.](0[1-9]|1[0-9]|2[0-8])[\/.](18|19|20)[0-9]{2})|((02)[\/.]29[\/.](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))$/;
    
    $(function () {
        $("#DOB").mask("99/99/9999", {
            completed: function () {
                $("#validate-error-info").text('');
                var rawInput = this.val();
                console.info(rawInput);
                if (!dateRegex.test(rawInput)) {
                    $("#validate-error-info").text(rawInput + " is not a valid date");
                }
            }
        });
    });

    有图有真相:



沪ICP备19023445号-2号
友情链接