none
Expresion regular que verifica una fecha valida dd/mm/aaaa Asp. Net - Javascript RRS feed

  • Pregunta

  • Saludos cracks, bueno luego de romperme la cabeza tratando de solucionar este problema, vengo hacia ustedes para que me ayuden, el problema es el siguiente:

    1.- Valido mediante JavaScript, los campos de un formulario y luego mando la informacion al servidor para ser guardada en la base de datos

    2.- Tengo un boton de tipo asp.net con las siguientes caracteristicas:

    <asp:Button ID="BotonAceptar" runat="server" Text="Aceptar" class="boton" 
     TabIndex="7" OnClientClick="return ValidaControles();" onclick="BotonAceptar_Click" />

    3.- La funcion JavaScript:

    function ValidaControles() 
    {
    var FechaNacimiento = document.getElementById('ContentPlaceHolder1_TxtFechaNacimiento').value;
    
     if (!isDate(FechaNacimiento)) 
        {               document.getElementById('ContentPlaceHolder1_mensaje').innerHTML = 'La fecha no tiene el formato correcto...';
         }
    }

    4.- La funcion isDate:

     function isDate(string) 
           { //string estará en formato dd/mm/yyyy (dí­as < 32 y meses < 13)
            var ExpReg = ^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[/\\/](19|20)\d{2}$
            return (ExpReg.test(string));
           }

    La funcion del punto 4 me retorna true o false dependiendo si la fecha es correcta o no (dd/mm/aaaa).

    El problema viene con la expresion regular:

    ^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[/\\/](19|20)\d{2}$

    Nose porque me marca error (marca error al apretar el boton error de Js menciona), la probe en esta pagina, en la cual se realizan pruebas con expresiones regulares y esta bien:

    http://www.metriplica.com/es/recursos/expresiones-regulares

    O como se coloca una expresion regular en una pagina asp .net? como soluciono este problema?

    Gracias por su tiempo.





    • Editado RealMaster martes, 23 de julio de 2013 23:04
    martes, 23 de julio de 2013 22:48

Respuestas

  • Ya lo solucione, con otra expresion regular, que realiza el mismo trabajo:

    /^([0][1-9]|[12][0-9]|3[01])(\/|-)([0][1-9]|[1][0-2])\2(\d{4})$/

    La verdad nose por que esta otra expresion regular no funciona:

    ^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[/\\/](19|20)\d{2}$

    Saludos

    • Marcado como respuesta RealMaster miércoles, 24 de julio de 2013 1:45
    miércoles, 24 de julio de 2013 1:45

Todas las respuestas

  • Pero que error te marca?? Puedes especificarlo? Seguro que es la exp.regular?

    Yo cambiria a

    function ValidaControles() 
    {
    var FechaNacimiento = document.getElementById('<%=TxtFechaNacimiento%>').value;
    
     if (!isDate(FechaNacimiento)) 
        {               document.getElementById('<%=mensaje%>').innerHTML = 'La fecha no tiene el formato correcto...';
         }
    }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    martes, 23 de julio de 2013 23:30
    Moderador
  • hola

    me pregunto y porque no evitas tanto problemas y usas directamente un control de fecha

    con esto ya no necesitaras validaciones porque el usuario selecciona la fecha del combo despelgable y sabras que asi siempre es valida

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    martes, 23 de julio de 2013 23:35
  • Pero que error te marca?? Puedes especificarlo? Seguro que es la exp.regular?

    Yo cambiria a

    function ValidaControles() 
    {
    var FechaNacimiento = document.getElementById('<%=TxtFechaNacimiento%>').value;
    
     if (!isDate(FechaNacimiento)) 
        {               document.getElementById('<%=mensaje%>').innerHTML = 'La fecha no tiene el formato correcto...';
         }
    }

    Me menciona, este error al apretar el boton asp ID = "BotonAceptar" (ni siquiera puedo depurar el codigo javascript sale el error):

    Error en tiempo de ejecución de Microsoft JScript: 'ValidaControles' no está definido


    si no uso la funcion de isDate (la coloco en comentarios) pues se puede depurar normalmente el codigo javascript.

    * Leandro no use el control calendario, porque el usuario requiere un calendario que vio por la web y tiene otra apariencia y otro funcionamiento.


    • Editado RealMaster miércoles, 24 de julio de 2013 0:43 edicion
    miércoles, 24 de julio de 2013 0:37
  • Tu función ValidaControles() no devuelve nada!! Tienes que hacer que por lo menos haga un return valor booleano ya que en el onclientclick haces return ValidaControles(); espero explicarme

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    miércoles, 24 de julio de 2013 0:49
    Moderador
  • Te refieres que la funcion valida Controles() tenga que retornar true o false;

     if (error == 0) 
                {
                    return true;
                }
    
                else 
                {
                    return false;
                }

    Lo hago asi, si no es asi, la verdad nose, es la primera vez que realizo este tipo de tarea.

    Saludos

    miércoles, 24 de julio de 2013 1:02
  • Ya lo solucione, con otra expresion regular, que realiza el mismo trabajo:

    /^([0][1-9]|[12][0-9]|3[01])(\/|-)([0][1-9]|[1][0-2])\2(\d{4})$/

    La verdad nose por que esta otra expresion regular no funciona:

    ^(0?[1-9]|[12][0-9]|3[01])[\/](0?[1-9]|1[012])[/\\/](19|20)\d{2}$

    Saludos

    • Marcado como respuesta RealMaster miércoles, 24 de julio de 2013 1:45
    miércoles, 24 de julio de 2013 1:45
  • Prueba con esta expresión regular. Permite meter días o meses con un solo dígito y controla los años bisiestos:
    expReg.Pattern = “^(” & _
    “(” & _
    “(0{0,1}[1-9]|[12][0-9]|3[01])([/])(0{0,1}[13578]|10|12)([/])(\d{4})” & _
    “)|(” & _
    “(0{0,1}[1-9]|[12][0-9]|30)([/])(0{0,1}[469]|11)([/])(\d{4})” & _
    “)|(” & _
    “(0{0,1}[1-9]|1[0-9]|2[0-8])([/])(0{0,1}2)([/])(\d{4})” & _
    “)|(” & _
    “(29)(\.|-|\/)(0{0,1}2)([/])([02468][048]00)” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([13579][26]00)” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][0][48])” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][2468][048])” & _
    “)|(” & _
    “(29)([/])(0{0,1}2)([/])([0-9][0-9][13579][26])” & _
    “))$”
    viernes, 3 de enero de 2014 7:17
  • Ninguna de las otras respuestas valida una fecha eficientemente, sin mencionar que algunas no toman años bisiestos, o aceptan datos incorrectos.

    Si realmente se quiere validar con una expresión regular, aunque no es para nada lo recomendado en términos de eficiencia, este regex cumple a la perfección con cualquier fecha en formato d/m/aaaa. Puede ser más larga que otras, pero es la única forma de validar eficientemente, y sin errores, cualquier fecha:

    /^(?:(?:(?:0?[1-9]|1\d|2[0-8])[/](?:0?[1-9]|1[0-2])|(?:29|30)[/](?:0?[13-9]|1[0-2])|31[/](?:0?[13578]|1[02]))[/](?:0{2,3}[1-9]|0{1,2}[1-9]\d|0?[1-9]\d{2}|[1-9]\d{3})|29[/]0?2[/](?:\d{1,2}(?:0[48]|[2468][048]|[13579][26])|(?:0?[48]|[13579][26]|[2468][048])00))$/

    Hay una excelente descripción de esta expresión, junto a otras alternativas (mejores) para validar en https://es.stackoverflow.com/q/59516/127


    jueves, 2 de noviembre de 2017 18:40