用于验证生日的脚本

时间:2014-02-26 11:46:48

标签: javascript jquery regex

我有这个脚本

 $("#SocialSecurityNumber").attr("placeholder","YYYY-MM-DD-XXXX").blur(function () {
        var str = $('#SocialSecurityNumber').val();
        var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str);
        var todays_date = new Date();
        var birth_date = new Date(res[1], res[2], res[3]);

        if (todays_date - birth_date > 565633905872) {
            $("#btn-activation").removeAttr('disabled');
            $("#SocialSecurityNumber").removeClass("input-validation-error");
        } else {
            $("#SocialSecurityNumber").attr("placeholder","Please enter date of birth as YYYY-MM-DD-XXXX").addClass("input-validation-error");
            $("#btn-activation").attr("disabled", "disabled");
        }
    });

});

这将根据输入#SocialSecurityNumber验证年龄 但是,当输入字母或其他乱码时,它根本不会验证,我得到js错误

Uncaught TypeError: Cannot read property '1' of null 

可以somone帮助我如何添加所以这个脚本也验证不正确的字符? (当正则表达式不匹配时)

2 个答案:

答案 0 :(得分:1)

根据我的评论,在javascript中,如果RegEx不匹配,则结果为null

因此,您尝试索引null变量...这就是您看到错误的原因。

您需要检查null值,如下所示......

 var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str);
 var todays_date = new Date();
 var birth_date = null;
 if (res != null) {
   birth_date = new Date(res[1], res[2], res[3]);
 }

 if (birth_date == null || todays_date - birth_date > 565633905872) {
    ...

你需要自己弄清楚确切的逻辑,但希望这可以让你知道出了什么问题。

答案 1 :(得分:0)

如果没有匹配项,则res将为null。所以你可以做的一件事是:

if(res.length==3)
var birth_date = new Date(res[1], res[2], res[3]);

这确认您获得的匹配数量恰到好处。