Problema expressões regulares. Dúvida: como validar uma data? Vejam meu exemplo que não deu lá tão c

1. Problema expressões regulares. Dúvida: como validar uma data? Vejam meu exemplo que não deu lá tão c

Michel Luis Grassi
mlgrassi

(usa Debian)

Enviado em 10/12/2018 - 21:24h

Prezados,

Preciso construir uma expressão que valide uma data como por exemplo 23/12/2018. De início já deixo claro que não tenho interesse em considerar o mês de fevereiro que as vezes tem 29 dias, portanto isso se deixa quieto.

No caso eu construí a seguinte REGEX:
REGEX=’^[0-3]{1}[0-9]{1}/[0-1]{1}[0-9]{1}2[0-9]{1}[0-9]{1}[0-9]{1}$’

Onde respectivamente:
DIA=[0-3]{1}[0-9]{1}
MÊS=[0-1]{1}[0-9]{1}
ANO=2[0-9]{1}[0-9]{1}[0-9]{1}

Considerando minha data fictícia 23/12/2018 ela seria aceita pela REGEX acima, no entanto há um problema: essa REGEX aceitaria valores como 39/03/2018, 03/00/2018, 22/14/2018 e por aí vai, ou seja, datas inválidas.

Tendo em vista que o conceito de expressão regular é avaliar caractere por caractere e que posso formar grupos utilizando os parênteses (), minha pergunta é:

Existe alguma forma de fazer a expressão simular um if, de maneira que:
DIA não possa ser maior que 31
MÊS não possa ser maior que 12

Alguém aí me ajuda?


  


2. Re: Problema expressões regulares. Dúvida: como validar uma data? Vejam meu exemplo que não deu lá t

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 10/12/2018 - 22:20h

Testa aí:
^[0-2][0-9]|(3)[0-1](\/)(0)[1-9]|(1)[0-2](\/)[0-9]{4}$ 

EDIT: Desconsidere esse. Achei uma solução melhor abaixo...



3. Re: Problema expressões regulares. Dúvida: como validar uma data? Vejam meu exemplo que não deu lá tão c

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 10/12/2018 - 22:25h

Ryuk escreveu:
^[0-2][0-9]|(3)[0-1]  


pergunta ... isso não estaria validando tb dia 00 ???
00 a 29, 30 e 31 !!

------------------------------------------| Linux User #621728 |-----------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------| Linux User #621728 |-----------------------------------------



4. Re: Problema expressões regulares. Dúvida: como validar uma data? Vejam meu exemplo que não deu lá t

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 10/12/2018 - 22:43h

Esse parece funcionar:
^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$ 

Referência:
http://regexlib.com/REDetails.aspx?regexp_id=250

Teste:

grep -E "^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$" datas.txt
31/12/2020
12/12/2012
01-05-2019
23/12/2018

$ cat datas.txt
32/13/2000
31/12/2020
12/12/2012
44/55/6666
01-05-2019
25/00/1999
23/12/2018
39/03/2018







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts