Validar CPF e CNPJ com Regex — padrões prontos para usar
Validar documentos brasileiros como CPF e CNPJ é uma necessidade comum em sistemas web e aplicativos nacionais. Enquanto a validação completa (verificação dos dígitos verificadores) requer código procedural, a validação de formato usando regex é o primeiro passo essencial para filtrar entradas obviamente inválidas antes de processar. Neste artigo, apresentamos padrões regex prontos para CPF, CNPJ e outros documentos brasileiros comuns, todos testáveis gratuitamente no Testador de Regex da WikiPlus antes de integrar ao seu código.
Regex para validação de formato de CPF
O CPF brasileiro tem formato fixo: três blocos de três dígitos separados por pontos, seguido de um traço e dois dígitos verificadores (999.999.999-99). A regex para validar este formato é: ^\d{3}\.\d{3}\.\d{3}-\d{2}$. Se você também precisa aceitar CPF sem formatação (apenas 11 dígitos seguidos), use: ^(\d{3}\.\d{3}\.\d{3}-\d{2}|\d{11})$. Lembre-se que regex valida apenas o formato, não os dígitos verificadores. Um CPF com formato válido mas dígitos verificadores incorretos passa na regex mas falha na validação matemática. Para sistemas que precisam de validação completa, use a regex para pré-filtrar e depois aplique o algoritmo de módulo 11 para verificar os dígitos. Teste esses padrões com exemplos reais no Testador de Regex da WikiPlus.
Regex para validação de CNPJ e outros documentos
O CNPJ tem formato: dois blocos de dois dígitos, um bloco de quatro dígitos, barra, dois dígitos, traço e dois verificadores (99.999.999/9999-99). Regex de formato: ^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$. Para CEP, o formato é 99999-999: ^\d{5}-\d{3}$. Para telefones celulares brasileiros com DDD: ^\(?\d{2}\)?[\s-]?9\d{4}[\s-]?\d{4}$. Para telefones fixos: ^\(?\d{2}\)?[\s-]?[2-5]\d{3}[\s-]?\d{4}$. Regex flexíveis para telefone (aceita com ou sem parênteses no DDD, com ou sem hífens) são úteis em formulários onde o usuário pode digitar em diferentes formatos. Use o Testador de Regex para verificar se sua regex aceita todos os formatos válidos que os usuários podem inserir.
Integração de regex de validação em formulários web
Em formulários HTML5, o atributo pattern permite especificar uma regex diretamente na tag input, com validação nativa do navegador sem JavaScript. Por exemplo: usando type='text' com pattern='\d{3}\.\d{3}\.\d{3}-\d{2}' e title='CPF no formato 999.999.999-99'. Em JavaScript, a forma mais limpa de usar regex para validação é: const cpfRegex = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/; if (!cpfRegex.test(cpfInput.value)) mostrar erro. Em frameworks como React ou Vue, a mesma lógica se aplica em funções de validação. Para aplicações com muitos campos validados por regex, considere uma biblioteca como Yup ou Zod que integra regex em schemas de validação de forma organizada.
Boas práticas para regex em produção
Ao usar regex em sistemas de produção, algumas práticas evitam problemas comuns. Sempre documente o que a regex valida com um comentário explicativo, pois regex complexas são difíceis de entender por quem não as escreveu. Escreva testes automatizados com casos válidos e inválidos para cada regex crítica — o Testador de Regex da WikiPlus é ótimo para desenvolvimento, mas testes automatizados garantem que futuras mudanças não quebrem a validação. Para regex usadas em múltiplos lugares, centralize-as em um módulo de constantes. Considere o feedback do usuário: mensagens de erro que explicam o formato esperado (ex.: 'Digite o CPF no formato 999.999.999-99') são muito mais úteis que apenas 'campo inválido'. E nunca confie apenas em validação de frontend — sempre revalide no backend.
Perguntas frequentes
- Regex valida se um CPF é realmente válido?
- Regex valida apenas o formato (estrutura de dígitos e pontuação). A validação matemática real de CPF requer verificar os dois dígitos verificadores usando o algoritmo de módulo 11. Use regex como primeiro filtro e implemente a validação completa em código para sistemas que exigem precisão.
- Como aceitar CPF tanto com quanto sem pontuação no mesmo campo?
- Use alternância na regex: ^(\d{3}\.\d{3}\.\d{3}-\d{2}|\d{11})$. Isso aceita tanto '123.456.789-09' quanto '12345678909'. No backend, normalize removendo pontuação antes de aplicar a validação matemática dos dígitos verificadores.
- Qual regex posso usar para validar emails no padrão brasileiro?
- Emails brasileiros seguem o mesmo padrão internacional. Uma regex funcional é: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. Ela aceita domínios .com.br, .org.br e outros. Teste no Testador de Regex da WikiPlus com exemplos reais antes de implementar.