2010-04-26 21 views
6

Mam pole tekstowe i datepicker obok niego i używam asp.net i użytkownik może wprowadzić datę, a także wybierz datę z datepicker.Datepicker Jquery: sprawdzanie daty mm/dd/rrrr

Jak można sprawdzić, czy data jest wprowadzona poprawnie?

<script type="text/javascript"> 
     $(document).ready(function() { 
      $('#<%=StartDate.ClientID%>').datepicker({ showOn: 'button', 
        buttonImage: '../images/Calendar.png', 
        buttonImageOnly: true, onSelect: function() { }, 
        onClose: function() { $(this).focus(); } 
      }); 
     }); 
    </script> 
+1

To zależy od tego, jaka jest Twoja definicja poprawnej daty? –

+1

np. 30/30/2008 to NIE jest prawidłowa data. –

Odpowiedz

4

Jeśli używasz ASP.NET, można użyć ASP.NET Porównaj Validator [ASP.NET Date Validator].

<asp:TextBox ID="tb" runat="server"></asp:TextBox> 

<asp:CompareValidator ID="cv" runat="server" 
ControlToValidate="tb" ErrorMessage="* Please enter a valid date!" Text="*" 
Operator="DataTypeCheck" Type="Date"></asp:CompareValidator> 

**** Aktualizacja **

Wziąłem JavaScript, który został wykonany przez Porównaj Walidatora powyżej owinięte niestandardową metodę jQuery Validation wokół niego:

<script type="text/javascript"> 
    $(document).ready(function() { 

     $.validator.addMethod("truedate", function (value, element, params) { 
      function GetFullYear(year, params) { 
       var twoDigitCutoffYear = params.cutoffyear % 100; 
       var cutoffYearCentury = params.cutoffyear - twoDigitCutoffYear; 
       return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year)); 
      } 

      var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$"); 
      try { 
       m = value.match(yearFirstExp); 
       var day, month, year; 
       if (m != null && (m[2].length == 4 || params.dateorder == "ymd")) { 
        day = m[6]; 
        month = m[5]; 
        year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10)); 
       } 
       else { 
        if (params.dateorder == "ymd") { 
         return null; 
        } 
        var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$"); 
        m = value.match(yearLastExp); 
        if (m == null) { 
         return null; 
        } 
        if (params.dateorder == "mdy") { 
         day = m[3]; 
         month = m[1]; 
        } 
        else { 
         day = m[1]; 
         month = m[3]; 
        } 
        year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10)); 
       } 
       month -= 1; 
       var date = new Date(year, month, day); 
       if (year < 100) { 
        date.setFullYear(year); 
       } 
       return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null; 
      } 
      catch (err) { 
       return null; 
      } 
     }, "Please enter an actual date."); 

     $("#form1").validate(); 

     $("#one").rules('add', 
     { 
      truedate: { 
       cutoffyear: '2029', 
       dateorder: 'mdy' 
      } 
     }); 
    }); 

</script> 

<input id="one" /> 
+0

Wiem, że mam opcję używania kontrolki asp.net, ale chciałem spróbować użyć sprawdzania poprawności jquery. –

+0

wziąłem javascript wyprodukowany przez walidator porównania i zawinąłem niestandardową metodę wokół niego – dochoffiday

+0

można również użyć 'remote' i na serwerze spróbuj przekonwertować go na datę, która będzie działać tylko jeśli jest to poprawna data – dochoffiday

0

Ponieważ jesteś już za pomocą jquery, możesz sprawdzić http://bassistance.de/jquery-plugins/jquery-plugin-validation/, który ma dużą elastyczność do sprawdzania poprawności.

+0

Używam bassistance.de do sprawdzania poprawności formularza, ale nie znajduję żadnego przykładu sprawdzanie daty, jeśli znajdziesz proszę przekieruj mnie –

+1

ma walidację daty, ale sprawdza tylko format ciągu, więc "30/30/2008" będzie prawidłową datą – dochoffiday

+0

@Doc: więc nie ma prawdziwej drogi sprawdzić datę? czy jestem pozostawiony tylko z opcją korzystania z kontroli poprawnej asp.net? –

33

Używam tego modułu obsługi do sprawdzania poprawności danych wejściowych:

onClose: function(dateText, inst) { 
     try { 
      $.datepicker.parseDate('dd/mm/yy', dateText); 
     } catch (e) { 
      alert(e); 
     }; 

nadzieja, że ​​będzie użyteczny dla kogoś

+1

Taka doskonała odpowiedź z tak małą fanfarą! –

4

używam mieszankę podejścia Katrin & Doc Holliday, wykorzystując metodę parseDate użytkową kontrolki datepicker w niestandardowy walidator Mam nazwie ISDATE.

Wystarczy zmienić argument formatowania w parseDate na odpowiednią wartość (referencja: http://docs.jquery.com/UI/Datepicker/parseDate).

$(document).ready(function() 
    { 
     $.validator.addMethod('isDate', function(value, element) 
     { 
      var isDate = false; 
      try 
      { 
       $.datepicker.parseDate('dd/mm/yy', value); 
       isDate = true; 
      } 
      catch (e) 
      { 

      } 
      return isDate; 
     }); 

     $("#form1").validate(); 

     $("#dateToValidate").rules("add", { isDate: true, messages: {isDate: "Date to Validate is invalid."} }); 
    }); 

To chyba nie najlepsze praktyki dla walidator do odwoływania się do kontroli interfejsu użytkownika, ale co do cholery. :)

Powiązane problemy