“/^((([0][1-9]|[12][0-9])02(19|20)([13579][26]|[02468][048]))
|(([0][1-9]|[12][0-8])02(19|20)([02468][12356]|[13579][13579]))
|((([0][1-9]|[12][0-9]|30)(0[469]|11)
|([0][1-9]|[12][0-9]|3[01])(0[13578]|1[02]))((19|20)[0-9][0-9])))$/”
Sabe o que é isso ai em cima?
Não?
É um monstrinho que eu criei para validar datas no formato “DDMMYYYY” “dia, mês e ano (com 4 dígitos )”.
Eu precisei dele para desenvolver uma lógica para um teste que eu fui submetido onde estou trabalhando atualmente, e creio que me sai bem, com a lógica ficou boa ( modéstia parte ), eu resolvi passar adiante para os programadores de plantão, como sempre o formato é em PHP pois não precisa escapar quase nada.
Agora vamos as explicações, ai vai a regex novamente, comentada:
( # se for fevereiro em ano bissexto
(([0][1-9]|[12][0-9])02(19|20)([13579][26]|[02468][048]))
|
# ou se for fevereiro em ano não bissexto
(([0][1-9]|[12][0-8])02(19|20)([02468][12356]|[13579][13579]))
|
# separação para os meses com 30 dias
((([0][1-9]|[12][0-9]|30)(0[469]|11)
|
# separação para os meses com 31 dias
([0][1-9]|[12][0-9]|3[01])(0[13578]|1[02]))
# para o intervalo de 1900 a 2099 anos
((19|20)[0-9][0-9]))
)
Bom, é isso ai galera, espero que ajude, peço para que aquele que testar esta regex comentar o que achou ou reportar eventuais bugs, beleza?
Forte abraço.