Antes de tudo: regex valida só o formato (quantos caracteres, onde vão os pontos). Ela não confere o dígito verificador — para isso, use o cálculo do módulo 11 ou o validador.
CNPJ numérico
Regex
# com máscara: 12.345.678/0001-95
^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$
# só dígitos: 12345678000195
^\d{14}$CNPJ alfanumérico (a partir de 2026)
As 12 primeiras posições aceitam letras maiúsculas; os 2 dígitos verificadores continuam numéricos:
Regex
# com máscara: 12.ABC.345/01DE-35
^[A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}/[A-Z0-9]{4}-\d{2}$
# só caracteres: 12ABC34501DE35
^[A-Z0-9]{12}\d{2}$Note o \d{2} no fim: o DV nunca tem letra. E só maiúsculas — para aceitar minúsculas, normalize com .toUpperCase() antes.
publicidade
Aceitar os dois formatos
Para um campo que receba CNPJ antigo ou novo, já sem máscara:
JavaScript
const RE_CNPJ = /^[A-Z0-9]{12}\d{2}$/;
const clean = entrada.replace(/[.\/-]/g, '').toUpperCase();
RE_CNPJ.test(clean); // só confere o formatoPassou no regex? Então confira o dígito — veja validar CNPJ em JavaScript.
E o CPF?
O CPF é sempre numérico: ^\d{3}\.\d{3}\.\d{3}-\d{2}$ (com máscara) ou ^\d{11}$ (só dígitos). Detalhes em regex de CPF.
Padrões de formato (não validam o dígito verificador). Para validação completa, use o módulo 11. Revisado em 06/2026.