+ Responder
Mostrar resultados 1 a 6 de 6

Tópico: Solução Validação de datas em c# [Expressão regular]

  1. #1

    Solução Validação de datas em c# [Expressão regular]

    Como validar uma data c#
    Código:
    #region [valida datas]
    
                        /*************Datas**********/
                        /*validacao de comparação entre duas datas ,
                         * datai - datainicial, 
                         * dataf - datafinal, 
                         * label - label erro da data final*/
                        public bool comparadatas(DateTime datai, DateTime dataf, System.Web.UI.WebControls.Label label)
                        {
                          bool res = false;
                          if (dataf >= datai)
                          {
                            res = true;
                            label.Text = "<span class=\"erroverdade\">*</span> ";
                          }
                          else
                          {
                            res = false;
                            label.Text = "<span class=\"errofalso\">*</span> ";
                          }
                          return res;
                        } 
    
                        /*Validação geral d um campo data  */
                        /* data - string da data inserida na textbox
                         * dataminima - string da data minima que pode ser inserida
                         * label - id da labelde erro referente a um determinado campo */
                        public bool VDatas(string data, string dataminima, System.Web.UI.WebControls.Label label)
                        {
    
                          bool resul = false;
    
                          // testa para caixa de data decisão vazia
                          if (data == "")
                          {
                            label.Text = "<span class=\"errofalso\">*</span> ";
    
                            resul = false;
                          }
                          // valida campo diferente de vazio
                          if (data != "")
                          {
                            //valida para campo com 10 caracteres e campo com tim e 10 caracteres
                            if ((data.Length == 10) || (data.Length == 10))// testa p numero de caracteres
                            {
                              // testa se e data valida
                              if (validaData(data))
                              {
                                string datamin = dataminima;
                                string strdatamin = datamin.Substring(6, 4) + "-" + datamin.Substring(3, 2) + "-" + datamin.Substring(0, 2);
                                DateTime datageral2 = Convert.ToDateTime(strdatamin);
    
                                string str = data.Substring(6, 4) + "-" + data.Substring(3, 2) + "-" + data.Substring(0, 2);
                                DateTime datageral = Convert.ToDateTime(str);
    
                                //testa se é menor ou igual que  a data actual
                                if (datageral <= datageral2)
                                {
                                  label.Text = "<span class=\"errofalso\">*</span>";
                                  resul = false;
                                }
                                //testa se é maior que a data actual
                                if (datageral > datageral2)
                                {
                                  label.Text = "<span class=\"erroverdade\">*</span>";
                                  resul = true;
                                }
    
                              }
                              else
                              {
                                label.Text = "<span class=\"errofalso\">*</span>";
    
                                resul = false;
                              }
                            }
                            else
                            {
                              label.Text = "<span class=\"errofalso\">*</span>";
    
                              resul = false;
    
                            }
    
                          }
                          return resul;
                        }
    
                        //valida data no ambito da sua formatação
                        private bool validaData(string str)
                        {
    
                          Regex Data = new Regex(@"^((((0?[1-9]|[12]\d|3[01])[\-](0?[13578]|1[02])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\-](0?[13456789]|1[012])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\-]0?2[\-]((1[6-9]|[2-9]\d)?\d{2}))|(29[\-]0?2[\-]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$");
                          return Data.IsMatch(str);
    
                        }
    
    
    
    
                #endregion
    conjunto de metodos em c# desenvolvidos por mim , excepto a exp regular

    validaData() , verifica tb se ano é bisexto ou n , recebe uma string data e verifica se a mesma é valida em ralaç
    ão a uma especificação, penso que esta formatada para dd-mm-aaaa, sempre a podes alterar
    devolvendo true caso seja valida e false caso contrario


    comparadatas(), compara se uma data é maior que outra devolvendo true caso verdade e false caso falso ....


    VDatas() tb devolve true ou false caso seja verdadeiro ou falso.

    esta faz tdas as verificações possiveis (pode faltar uma ou outra mas são suficientes),
    • se o campo de data vazio ou não ,
    • verifica o tamanho da string da data,
    • se data valida "validaData()",
    • verifica se a data a tua data em relação a actual.
    se não me engano esta espressão regular da ate ano 2040 e tal (salvo erro)
    Última edição de Armadillo : 30-01-2009 às 09:12 Razão: adicionada tag [code]
    Citar Citar  

  2. #2
    Código:
    public bool validaData(string sData) {
         try {
             DateTime.Parse(sData);
             return true;
         } catch {
             return false;
         }
    }
    Mais simples e sem usar regex.
    Citar Citar  

  3. #3
    sim mas supoe que ao pores uma ata na txtbox queres validar se essa mesma data esta no formato

    dd-mm-aaa ou dd/mm/aaa ou dd.nn.aaa , e por ai fora a expressão regular serve para isso mesmo
    Citar Citar  

  4. #4
    Citação Resposta Original de alfinete Ver Resposta
    sim mas supoe que ao pores uma ata na txtbox queres validar se essa mesma data esta no formato

    dd-mm-aaa ou dd/mm/aaa ou dd.nn.aaa , e por ai fora a expressão regular serve para isso mesmo
    Para isso tens o DateTime.ParseExact (ou TryParseExact) que recebe num dos argumentos uma string a indicar o formato em que se encontra a data... se aceitas vários formatos distintos, podes ter uma lista de strings com formatos e iteras sobre essa lista, chamando o método TryParseExact em cada iteração...

    ... ou então usas uma expressão regular que suporte os casos todos, mas aí podem escapar-te alguns casos...
    A minha thread de avaliação: http://www.techzonept.com/showthread.php?p=484844

    [Uma curva belíssima, uma equipa fantástica... és a nossa fé!!!!!! FORÇA SPORTING allez!!]
    Citar Citar  

  5. #5
    Separas o ano, mês e dia. Colocas num try catch e convertes para a data no formato que pretendes. Devolve true se correcta, false se não.
    Citar Citar  

  6. #6
    mas nesse caso ficas com mais code


    ai so tens uma linha com a expressão regular se da true é verdadeira se e false da falsa

    as restantes verificações so tem a ver com datas minimas e maximas, tamanho da data etc

    por isso a da expressão regular fica com menos code

    mas ambas as abordagens estão bem
    Citar Citar  

+ Responder

Marcadores

Regras

  • Não pode abrir novos tópicos
  • Não pode colocar mensagens
  • Não pode colocar anexos
  • Não pode editar as suas mensagens

Registe-se no fórum e active o seu registo para deixar de ver este anúncio.