1. JavaScript / Говнокод #2707

    +159.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    function check_date() {
    	var	message = "Дата невалидна.";
    		days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    
    	var str = $('#registration-form [name="birthday"]').val();
    
    	var m = str.match(/(\d*)\.(\d*)\.(\d*)(.*)/);
    
    	if (!m ||
    		!m[1] ||
    		!m[2] ||
    		!m[3] ||
    		m[4] ||
    		parseInt(m[2], 10) < 1 ||
    		parseInt(m[2], 10) > 12 ||
    		parseInt(m[1], 10) < 1 ||
    		parseInt(m[1], 10) > days[parseInt(m[2], 10)-1] ||
    		parseInt(m[3], 10) < 1920 ||
    		parseInt(m[3], 10) > 2000 ) {
    		tooltip($('#registration-form [name="birthday"]').get(0), message);
    	} else {
    		removett($('#registration-form [name="birthday"]').get(0));
    	}
    }

    Не очень говно, но вполне себе код.

    Запостил: ixth, 03 Марта 2010

    Комментарии (23) RSS

    • И да, валидация даты, конечно же.
      Ответить
    • Переписал как-то так и жажду одобрения:
      function check_date() {
      	var	message = "Дата невалидна.",
      		m = $('#registration-form [name="birthday"]').val().split('.'),
      		date = new Date(m[2], m[1] - 1, m[0]);
      
      	if (date.getDate() != m[0] ||
      		date.getMonth() != m[1] - 1 ||
      		date.getFullYear() != m[2]) {
      		tooltip($('#registration-form [name="birthday"]').get(0), message);
      	} else {
      		removett($('#registration-form [name="birthday"]').get(0));
      	}
      }
      Ответить
      • Не учитывается диапазон годов
        Ответить
        • || !(1920 < m[3] && m[3] < 2000)
          ммм?
          Ответить
          • А что же будет с нашими уважаемыми ветеранами? Что ж теперь, 90-летним в интернет не ходить?!
            Ответить
      • Не понял, опять реализуется сценарий "я признаю, что мой код - говно, а вы даёте мне годных советов"? =)
        Ответить
      • нет проверки на правильность ввода, например, "5.12" или "", или "произвольный текст"
        Ответить
        • или "dd.mm.yyyy"
          Ответить
          • Оно просто не отпарсится в дату и зафэйлит валидацию.
            Ответить
            • хорошо, тогда "12.06.1990.456.789"
              Ответить
              • Ок, тогда так:
                var	message = "Дата невалидна.",
                	m = document.registration.birthday.value.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/),
                	date = m ? new Date(m[3], m[2] - 1, m[1]) : null;
                
                if (!date ||
                	date.getDate() != m[1] ||
                	date.getMonth() != m[2] - 1 ||
                	date.getFullYear() != m[3] ||
                	!(1920 < m[3] && m[3] < 2000)) {
                	tooltip($('#registration-form [name="birthday"]').get(0), message);
                } else {
                	removett($('#registration-form [name="birthday"]').get(0));
                }
                Ответить
                • 29.02.2010?
                  Ответить
                  • Превратится в первое марта и отфильтруется этим:
                    date.getDate() != m[1] ||
                    	date.getMonth() != m[2] - 1 ||
                    	date.getFullYear() != m[3] ||
                    Ответить
    • Лучше намутить виджет "Календарь". Он не даст ошибиться.
      Ответить
    • var	message = "Дата невалидна.",


      Прочитал: Два инвалида. )))
      Ответить
    • сам исправляй свои баги, говнопостер!
      Ответить
    • теплое, мягкое jquery
      Ответить

    Добавить комментарий