Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Валидация даты JQuery


Автор: llalive 7.6.2011, 18:18
Доброго времени суток. 
Наткнулся на непонятное поведение одного из плагинов для JQuery  - validateMyForm (скачан с официального сайта http://plugins.jquery.com). Плагин выдает ошибку при проверке поля типа "дата", если в качестве месяца заданы числа 08 и 09. Другие комбинации - 01, 05, 12, 1, 5, 6 и др. проблем не вызывают. 
Валидация поля производится при помощи шаблона regex. 
Функция проверки даты:
Код

  function isValidDate(str, daysFirst){
        
      var re = /^(\d{1,2})[\s\.\/-](\d{1,2})[\s\.\/-](\d{4})$/
      if (!re.test(str)) return false;
      var result = str.match(re);
      var m = parseInt(result[1]);
      var d = parseInt(result[2]);
      if (daysFirst) {
      //if dd/mm/yyyy
        d = parseInt(result[1]);
        m = parseInt(result[2]);
      }
      var y = parseInt(result[3]);
      if (m < 1 || m > 12 || y < 1900 || y > 2100) return false;
      if (m == 2){
              var days = ((y % 4) == 0) ? 29 : 28;
      } else if(m == 4 || m == 6 || m == 9 || m == 11){
              var days = 30;
      } else{
              var days = 31;
      }
      return (d >= 1 && d <= days);
  }


Просьба поделиться мыслями.

Автор: llalive 10.6.2011, 22:31
Решение оказалось довольно простым. Проблемной была функция parseInt(). Данная функция вторым параметром получает систему счисления. По умолчанию используется восьмеричная система счисления parseInt(result[1],8).
После того, как задал десятичную систему счисления всё заработало как часы - parseInt(result[1],10).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)