Я получил этот скрипт
$("#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 Однако при вводе букв или другой jibberish он вообще не проверяет, и я получаю js error
Uncaught TypeError: Cannot read property '1' of null
Может ли кто-нибудь помочь мне с тем, как я могу добавить, чтобы этот скрипт также проверял неправильные символы? (когда регулярное выражение не сопоставляется)
Согласно моему комментарию, в 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) {
...
Вам нужно будет разобраться с точной логикой, но, надеюсь, это дает вам представление о том, что происходит не так.
Если совпадения нет, то res
будет null
. Итак, вы можете сделать следующее:
if(res.length==3)
var birth_date = new Date(res[1], res[2], res[3]);
Это подтверждает, что вы получаете только правильное количество совпадений.
res
будет нулевым ... поэтому вызов индекса для него всегда будет неудачным. Вам нужно проверитьres != null
(или аналогичный) перед выполнениемres[1]