我得到了这个脚本
$("#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]);
这确认您只获得正确数量的匹配项。