скрипт для проверки даты рождения

0

Я получил этот скрипт

 $("#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 

Может ли кто-нибудь помочь мне с тем, как я могу добавить, чтобы этот скрипт также проверял неправильные символы? (когда регулярное выражение не сопоставляется)

  • 0
    Если RegEx не совпадает, res будет нулевым ... поэтому вызов индекса для него всегда будет неудачным. Вам нужно проверить res != null (или аналогичный) перед выполнением res[1]
Теги:

2 ответа

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) {
    ...

Вам нужно будет разобраться с точной логикой, но, надеюсь, это дает вам представление о том, что происходит не так.

0

Если совпадения нет, то res будет null. Итак, вы можете сделать следующее:

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

Это подтверждает, что вы получаете только правильное количество совпадений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню