用于验证出生日期的脚本



我得到了这个脚本

 $("#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 能否帮助我了解如何添加,以便此脚本也能验证不正确的字符?(当正则表达式不匹配时)

根据我的评论,在 javascript 中,如果正则表达式不匹配,则结果为 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) {
    ...

您需要自己整理出确切的逻辑,但希望这能让您了解出了什么问题。

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

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

这确认您只获得正确数量的匹配项。

最新更新