1
resposta

[Dúvida] Caracteres especiais ou classe de caracteres?

Na atividade "validando cpf" dentro do pattern.compile:

Pattern pattern = Pattern.compile("^[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}$");

tem diferença para:

Pattern pattern = Pattern.compile("\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}");

ou é só a forma de escrever?

1 resposta

Oi, tudo bem?

Augusto, essa é uma excelente pergunta. Embora os dois padrões busquem validar o mesmo formato de CPF, existem diferenças técnicas importantes no comportamento de cada um.

A resposta curta é: sim, há diferença, e a segunda opção é mais precisa.

Vamos analisar os pontos principais:

1. O perigo do ponto final (.)

Na sua primeira expressão, você utilizou o ponto diretamente: [0-9]{3}.[0-9]{3}.
Em Expressões Regulares, o ponto é um metacaractere que significa "qualquer caractere" (uma letra, um espaço, um arroba, etc.).

  • No seu primeiro exemplo: O CPF 123A456B789-00 seria aceito como válido, pois o ponto interpretou as letras 'A' e 'B' como caracteres permitidos.
  • No exemplo do instrutor: O uso de \\. (escape) indica que você quer validar especificamente o caractere de ponto final literal.

2. Classes de caracteres: [0-9] vs \\d

Aqui a diferença é apenas estética e de conveniência:

  • [0-9] define um intervalo explícito de números.
  • \\d é um atalho (shorthand) para representar qualquer dígito numérico.
    Ambos funcionam da mesma forma na prática para o sistema brasileiro.

3. Âncoras de início e fim (^ e $)

Você adicionou ^ (início da linha) e $ (fim da linha). Isso é uma boa prática!

Espero ter ajudado.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!