Antes de tudo: regex valida só o formato (quantos dígitos, onde vão os pontos). Ela não confere o dígito verificador — para isso, use o módulo 11 ou o validador.
CPF com e sem máscara
Regex
# com máscara: 123.456.789-09
^\d{3}\.\d{3}\.\d{3}-\d{2}$
# só dígitos: 12345678909
^\d{11}$Aceitar com OU sem máscara
Para um campo que aceite as duas formas, o caminho mais simples é limpar a pontuação antes de testar:
JavaScript
const RE_CPF = /^\d{11}$/;
const clean = entrada.replace(/[.\-]/g, '');
RE_CPF.test(clean); // só confere o formatoSe preferir uma única regex tolerante à máscara opcional:
Regex
^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$publicidade
Depois do regex, valide o dígito
Passou no formato? Então confira o dígito verificador — é isso que rejeita um número digitado errado. Veja validar CPF em JavaScript.
E o CNPJ?
O CNPJ tem 14 caracteres e, a partir de 2026, pode ter letras. A regex é diferente — veja regex de CNPJ.
Padrões de formato (não validam o dígito verificador). Para validação completa, use o módulo 11. Revisado em 06/2026.