2010-04-26 24 views
6

Tengo un cuadro de texto y una fecha al lado y estoy usando asp.net y el usuario puede ingresar la fecha y seleccionar la fecha de datepicker.Jquery datepicker: validar fecha mm/dd/aaaa

¿Cómo se validaría si se ingresa la fecha correcta?

<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

Eso depende de lo que su definición de una fecha correcta es? –

+1

por ejemplo, 30/30/2008 no es una fecha válida. –

Respuesta

4

Si está utilizando ASP.NET, se puede utilizar un validador ASP.NET Comparar [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> 

actualización **** **

Tomé el javascript que fue ejecutado por el Validador de comparación arriba y se envolvió en una costumbre método jQuery Validación de evitarlo:

<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

Sé que tengo la opción de usar el control asp.net pero quería intentar usar la validación de jquery. –

+0

tomé el javascript producido por el validador de comparación y envolví un método personalizado alrededor de él – dochoffiday

+0

también podría usar 'remoto' y en el servidor intenta convertirlo a una fecha que también solo funcionará si es una fecha válida – dochoffiday

0

Dado que usted es Ya usando jquery, puede consultar http://bassistance.de/jquery-plugins/jquery-plugin-validation/, que tiene una gran flexibilidad para las validaciones.

+0

estoy usando bassistance.de para la validación de mi formulario, pero no encuentro ningún ejemplo para la validación de la fecha, si lo encuentra, por favor redirigirme. –

+1

tiene una validación de fecha, pero solo verifica el formato de la cadena, por lo que "30/30/2008" sería una fecha válida – dochoffiday

+0

@Doc: así que no hay manera real para verificar la fecha? o ¿me queda la única opción para usar los controles de validation de asp.net? –

33

Utilizo este controlador para validar la entrada:

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

Esperanza, que va a ser útil para alguien

+1

¡Una respuesta tan perfecta con tan poca fanfarria! –

4

estoy usando una mezcla de enfoque Katrin & Doc de vacaciones, utilizando el método de utilidad parseDate del control selector de fechas en un validador personalizado He llamado ISDATE.

Simplemente cambie el argumento de formato en parseDate al valor apropiado (referencia: 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."} }); 
    }); 

Es probable que no las mejores prácticas para el validador que se referencia a un control de interfaz de usuario, pero qué diablos. :)