我有这个脚本
$("#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帮助我如何添加所以这个脚本也验证不正确的字符? (当正则表达式不匹配时)
答案 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]);
这确认您获得的匹配数量恰到好处。