Validações e Expressões Regulares
Por: Wednesday 31 August 2005 às 9:17 AM
Minha intensão com este post não é explicar tudo sobre o assunto, pois seria muita pretensão da minha parte, apenas quero mostrar as utilidades e facilidades de se usar Expressões regulares.
Expressão regular é um método formal de se especificar um padrão de texto, ou seja, é uma composição de símbolos, caracteres com funções especiais, que, agrupados entre si e com caracteres literais, formam uma seqüência, uma expressão. Essa expressão é interpretada como uma regra, que indicará sucesso se uma entrada de dados qualquer casar com essa regra, ou seja, obedecer exatamente a todas as suas condições.
Esta definição e o exemplo foram retirados do Guia de Expressões Regulares do Aurélio Marinho Jargas.
Ou seja com expressões regulares podemos procurar padrões em textos bastando para isso, construirmos uma expressão adequada, ou então, como mostrarei abaixo, podemos utilizar expressões regulares para validar formatos.
Mas como assim validar formatos?
Vamos construir uma expressão regular para validar uma data, exemplo completo nesta página do Guia de Expressões Regulares.
O que é uma data? Considerando o padrão brasileiro, é uma seqüência de dois números uma barra mais dois números mais uma barra e mais quatro números, em suma podemos dizer que 99/99/9999 representa o formato de uma data!
Como o meu intuito não é ensinar, mas sim dispertar o interesse sobre o assunto, vou partir do resultado final, se vocês querem aprender sobre Expressões Regulares, recomendo que leiam o Guia de Expressões Regulares.
Uma Expressão Regular que pode ser utilizada para validar uma data é a seguinte (Seguindo uma sugestão do Aurélio, vou colocar a expressão mais espaçada para facilitar o entendimento):
( 0[1-9]|[12][0-9]|3[01] ) /
( 0[1-9]|1[012] ) /
[12][0-9]{3}
Nossa mas o que é isso? Calma que eu vou tentar explicar, mas é melhor irmos por partes:
1º) Para validar os dias utilizamos -> (0[1-9]|[12][0-9]|3[01]), significa que a expressão considera válido tudo aquilo que iniciar com 0 (zero) e vier seguido de qualquer número de 1 a 9 ([1-9]) ou então ( | ) tudo que iniciar com 1 ou 2 ([12]) e vier seguido de qualquer número de 0 a 9 ([0-9]) ou então ( | ) tudo que iniciar com 3 e vier seguido de 0 ou 1 ([01]), o que significa que esta expressão só reconhece como válido números entre 01 e 31, ou seja, tirando alguns meses particulares validamos qualquer dia de uma data.
2º) A validação dos meses é semelhante -> (0[1-9]|1[012]), ou seja, reconhece como válido números entre 01 e 12, não preciso mais me preocupar com qualquer mês que seja digitado na data.
3º) Para validar o ano utilizamos -> ([12][0-9]{3}), significa que a expressão reconhece como válido qualquer número que se inicie com 1 ou 2 ([12]) seguidos de números entre 0 e 9 ([0-9]), sendo que estes se repetem 3 vezes ({3}), ou seja, reconhece como válido números entre 1000 e 2999.
4º) Já ia me esquecendo das barrinhas (/) que devido a sua posição, apenas reconhece como válido datas digitadas no formato dd/mm/yyyy.
Que conclusão podemos tirar?
Que com apenas uma linha não tão complexa assim, podemos praticamente validar qualquer data, é lógico que temos que levar em conta os meses que não tem 31 dias e também fevereiro que se for um ano bissexto tem 29 dias e se não for ano bissexto tem 28 dias, mas tirando estes pequenos detalhes com apenas uma linha faço a análise se a uma data é ou não válida.
Para aqueles que se interessarem fiz a função que valida data, utilizando a expressão regular acima, e validando também os meses que não tem 31 dias e também o mês de fevereiro, considerando se é ou não bissexto, nunca vi isso antes num blog, mas vou colocar um campo para testes, lembrando que o formato da data é dd/mm/yyyy.
Fiquem a vontade, para baixar e usar a função, apenas gostaria de um retorno, informando se a função atendeu bem às necessidades, ou se ela tem algum erro, fiquem a vontade para comentar se a função estiver errada. Download
[update 26/03/2006 16:10] Corrigido o link de download do script de validação de data [/update]















# 1° Luciana A. Fonseca September 7th, 2005 às 11:06 AM GMT
Uma validação que funciona e não é gigantesca igual a algumas que eu já vi.
Parabéns pelo post e pela iniciativa de colocar o código fonte.