Avaliem: regexps e templates [era: Assim está bom? Como fazer com templates?]

4 respostas
Fox_McCloud
Oi. Estou começando a mexer com OOP e aproveitando pra mexer com expressões regulares. Essas três classes JAVA abaixo estão boas? Como eu poderia fazer isso com templates? Obrigado.
import java.util.regex.*;

public class REGEXP {

	protected static Pattern NumericoReal=	
Pattern.compile("^[+-]?[0-9]+([.][0-9]+)*([,][0-9]+)?$");
	protected static Pattern NumericoInteiro=	
Pattern.compile("^[+-]?[0-9]+([.][0-9]+)*$");
	protected static Pattern EMail=		
Pattern.compile("^[a-zA-Z]+([.-_][a-zA-Z]+)*@[a-zA-Z]+([.-_][a-zA-Z]+)*([.][a-zA-Z]{2,3}){1,2}$");
	protected static Pattern LetrasNumeros=	
Pattern.compile("^[0-9a-zA-ZáàâãäéèêëíìîïóòôõöúùûüçñÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇÑ]+$");
	protected static Pattern Letras=		
Pattern.compile("^[a-zA-ZáàâãäéèêëíìîïóòôõöúùûüçñÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇÑ]+$");
	protected static Pattern Cnpj=		
Pattern.compile("^[0-9]{2}[.]?[0-9]{3}[.]?[0-9]{3}[/]?[0-9]{4}-?[0-9]{2}$");
	protected static Pattern Cpf=		
Pattern.compile("^[0-9]{3}[.]?[0-9]{3}[.]?[0-9]{3}-?[0-9]{2}$");
	protected static Pattern Rg=		
Pattern.compile("^([0-9]{1})?[0-9]{2}[.][0-9]{3}[.][0-9]{3}(-[0-9Xx]{1})?$");
	protected static Pattern Cep=		
Pattern.compile("^[0-9]{5}-?[0-9]{3}$");
	protected static Pattern Telefone=		
Pattern.compile("^([(][0-9]{2}[)])?([(][0-9]?(XX|xx)?[0-9]{2}[)])?[0-9]{3,4}-?[0-9]{4}$");
	protected static Pattern MesAno=		
Pattern.compile("^(0[1-9]|1[0-2])[/]?(19|20)?[0-9]{2}$");
	protected static Pattern UF=		
Pattern.compile("^(ac|AC|al|AL|am|AM|ap|AP|ba|BA|ce|CE|df|DF|es|ES|go|GO|ma|MA|mg|MG|ms|MS|
mt|MT|pa|PA|pb|PB|pe|PE|pi|PI|pr|PR|rj|RJ|rn|RN|ro|RO|rr|RR|rs|RS|sc|SC|se|SE|sp|SP|to|TO)$");
	protected static Pattern Ip=		
Pattern.compile("^([0-9]{1,3}[.]){3}[0-9]{1,3}$");
	protected static Pattern Url=		
Pattern.compile("^(http:[/][/])?(www[.])?[a-zA-Z]+([a-zA-Z0-9%])*([.-_]([a-zA-Z]([a-zA-Z0-9%])*)+)
*([.][a-zA-Z]{2,3}){1,2}([/][a-zA-Z~]+([a-zA-Z0-9%])*)*[/]?([?]([a-zA-Z]([a-zA-Z0-9%])*)+=
([a-zA-Z]([a-zA-Z0-9%])*)+([&]([a-zA-Z]([a-zA-Z0-9%])*)+=([a-zA-Z]([a-zA-Z0-9%])*)+)*)?$");
	protected static Pattern Senha=		Pattern.compile("^[ -~]+$");
	protected static Pattern SemEspeciais=	
Pattern.compile("^[^#$%^&*()'<>\"]*$");
	protected static Pattern Data=		
Pattern.compile("^(0[1-9]|[1-2][0-9]|3[01])[/](0[1-9]|1[0-2])[/](19|20)[0-9]{2}$"); // dd/mm/aaaa

}
import java.util.regex.*;

public class Valida {
	
	private Matcher encaixe;
	private boolean casou;
	
	public Valida(String expressao,Pattern padrao){
		encaixe=padrao.matcher(expressao);
		verifica();
	}
	
	private void verifica(){
		if(encaixe.find())casou=true;
		else casou=false;
	}
	
	public boolean validou(){
		return casou;
	}

}
public class Teste {

	private Valida validacao;
	
	public Teste(){
		validacao=new Valida("[email removido]",REGEXP.EMail);
		System.out.println(validacao.validou()?"Ok":"Erro");
	}
	
	public static void main(String args[]){
		Teste teste=new Teste();
	}
	
}

4 Respostas

pcalcado

1 - Por favor, quebre sua linha para não causar scroll horizontal
2 - Convenções de nomenclatura na linugagem java: http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
3 - Use constantes para suas regexps
4 - Como assim com generics? Onde você pensa em aplicar?
5 - Coloque um título mais sugestivo :wink:

Shoes

Fox_McCloud

1-) Ok, tomarei mais cuidado com quebras de linha.
2-) Grato pela dica de nomenclatura!
3-) Como é uma constante em Java?
4-) Generics não, templates. Eu estava pensando se tem um jeito de mandar só o texto que eu quero validar e a própria classe verifica se há encaixe com alguma das expressões regulares e qual é. Mas agora colocando assim eu vejo que não preciso de generics pra fazer isso, é só lógica mesmo, né?
5-) Ok.
Valeu. Aceito mais dicas! :smiley:
A propósito, existem outras coisas que eu posso usar no corpo da minha mensagem além daquela tag “code”?
Abraços.

plentz

Sim, é só dar uma olhada no editorzinho que aparece quando você cria/responde um tópico :smiley:

Mauricio_Linhares

Em vez de usar:

protected static Pattern numero = Pattern.compile("");

Use:

public static final Pattern numero = pattern.compile("");

Os templates de C++ não existem em Java, pra testar todos os patterns, você vai ter que ir de um em um.

Criado 2 de julho de 2005
Ultima resposta 4 de jul. de 2005
Respostas 4
Participantes 4