[Duvida] Regex para validar data

Falae galera beleza?
Estou estudando regex e estou com problema para implementar um validador de data.
Queria validar no formato XX\XX\XXXX mais não consigo por \ já tentei scape e nada… então coloquei -
Outra coisa seria como faria no mês o mes só pode começar com 0 e 1 porem se for 1 o segundo s´´o pode ir até 2
como faria isso?
Abaixo meu codigo

public class Validacao { public String validarData(String data){ if( data.matches("[0-3]\d-[0-9]\d-[1-2]\d{3}") == true ){ return data; }else{ return "Data Inválida!"; } } }

obrigado!

Pra validar um \ você precisa de \\.

Isso porque se você colocar só um, o compilador java verá a string com scape inválido. Se colocar 2 o engine da regex vai enxergar só um( pq o compilador usou o outro como escape). Enxergando só um \ o engine da regex vai lançar exceção pq esse é um caractere reservado nas expressões regulares.

Pra validar data, eu usaria algo como ;


" (0[1-9]|[1-9]|1[0-9]|2[0-9]|3[0-1])" //valida um dia começando com 0 ou não, seguiindo essa ideia você consegue validar o mês sozinho.

Não testei mas a ideia é essa.

Só uma perguntinha - o formato de datas normalmente é com “/” (sinal de trânsito indicando “declive”), não com “” (que indica “aclive”). Nunca vi um formato com “”.

Você não está com problemas de digitar o “/”? Se estiver usando um notebook, use o Alt direito e a tecla Q.

[quote=entanglement]Só uma perguntinha - o formato de datas normalmente é com “/” (sinal de trânsito indicando “declive”), não com “” (que indica “aclive”). Nunca vi um formato com “”.

Você não está com problemas de digitar o “/”? Se estiver usando um notebook, use o Alt direito e a tecla Q.

[/quote]

Opa mano, o objetivo msm é entender a parada.

Abraço!!

rod.attack acho que entendi mais não to conseguindo fazer funcionar
separei em linhas para ficar mais legivel

0[1-9]|1[0-9]|2[0-9]|3[0-1] // Testa se o dia é 0 (1até9) ou 1(0até9) ou ... \/ // poe uma barra ( / ) , (agora a barra certa) 0[1-9]|1[0-2] // Testa o mes 0(1até9) ou 1(0até2) \/ // poe uma barra ( / ) , (agora a barra certa) [1-2]\d{3} //Testa se é 1 ou 2 seguido de 3 digitos

Tá dando erro ainda ele não reconhece 10/10/2010 =/

Vou continuar testando aqui, se alguem puder ajudar!! agradeço!!