[RESOLVIDO]Criar Metodo de Validação de CPF usando Pattern

aew galera, blz??
seguinte to pegando Patterns agora… to na duvida nesse metodo aqui

[code]public static boolean validarCpf(String cpf){
if(cpf == “”){
return false;
}
padrao = Pattern.compile("[0-9].[0-9].[0-9]-[0-9]{3,3,3,2}");
matcher = padrao.matcher(cpf);
return matcher.matches();

}[/code]

quando eu passo o cpf

Cliente c = new Cliente(); c.setNome("Max"); c.setSobrenome("Mustang"); c.setCpf("12312312399"); System.out.println(c.getNome()); System.out.println(c.getSobrenome()); System.out.println(c.getCpf());

e o setCpf ta assim:

public void setCpf(String cpf) { if(Validacao.validarCpf(cpf)){ this.cpf = cpf; } else { this.cpf = null; } }

to na duvida, qual é o meu erro???

vlww

Olá maxmustang.

O problema está na sua expressão regular.
O que você tenteou fazer para especificar a quantidade das listas não funciona. (Pelo menos nunca tinha visto essa sintaxe, e todos os testes que eu fiz aqui não funcionaram desse modo)

No caso pra você poder especificar as quantidades das listas você precisa especifica-la logo em seguida:

[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2]

Mas tem alguns outros pontos que eu consideraria:
Em expressões regulares o “.” (ponto) significa qualquer caractere, nesse caso a expressão iria casar com as possíveis strings passadas:

111g332h312-11

Ou com qualquer outra coisa que você colocasse no lugar do ponto.
Outro ponto é que seria interessante tornar os pontos opcionais.
Até mesmo porque no código que você passou ao chamar os métodos você passou só os números, não iria casar com a regex desse jeito.

Com essas alterações ficaria assim:

[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}-?[0-9]{2}

Mas se para para olhar, temos um trecho repetido, você vai ter trêz vezes uma sequencia de três números, ainda daria pra simplificar essa regex
criando um grupo que ira casar com uma lista de 3 números seguidos por um ponto opcional, esse grupo repetido 3 vezes, seguido de um hífen também opcional seguido de uma lista de 2 números.
No final das contas eu faria assim:

^([0-9]{3}\.?){3}-?[0-9]{2}$

Observe que o “.” (ponto) está escapado com a barra, para que ele realmente signifique “um ponto” e não qualquer caracter.

Qualquer dúvida estamos ai.

Abraços

Apenas lembrando que o que o guedes postou deve resolver seu problema quanto à formatação do CPF, e não quanto à validação (aí entra o quesito do cálculo com o dígito verificador).