Regex de CPF
Regex para validar o formato de CPF com ou sem pontuação (000.000.000-00 ou 11 dígitos). Confere só a forma; os dígitos verificadores exigem cálculo.
O padrão
\d{3}\.\d{3}\.\d{3}-\d{2}|\d{11}
Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.
Teste na hora
| Linha | Resultado |
|---|
Tudo roda no seu navegador; nada do que você digita é enviado.
Exemplos
Casam
111.444.777-3511144477735529.982.247-2539053344705
Não casam
123.456.789-0123.456.789101234567890abc.def.ghi-jk111.444.777-355
Como funciona, por partes
\d{3}\.\d{3}\.\d{3}-\d{2}: Primeira alternativa: o CPF formatado. Três dígitos, ponto, três dígitos, ponto, três dígitos, hífen e dois dígitos finais. O ponto aparece escapado porque o ponto solto, em regex, significa qualquer caractere.|: A barra vertical separa as duas formas aceitas. Ela tem a menor prioridade do padrão, por isso, ao embutir o regex em outro maior, ele precisa ficar dentro de um grupo.\d{11}: Segunda alternativa: onze dígitos seguidos, sem pontuação, que é como o número costuma ser guardado em bancos de dados e planilhas.Por que duas alternativas: Aceitar só o formato completo ou só o numérico evita misturas como 123.456.78910, que um padrão com pontos e hífen opcionais deixaria passar. Aqui o texto é todo formatado ou todo numérico.Ancoragem: Para conferir um campo inteiro, o padrão precisa estar entre ^ e $ (o mini-testador desta página faz isso quando a caixa de texto inteiro está marcada). Sem âncoras, o regex também encontra um CPF no meio de uma frase.
Armadilhas
- O regex só confere o formato. Ele aceita 000.000.000-00 e qualquer sequência de onze dígitos, mesmo que os dois últimos não batam com o cálculo. Para saber se o CPF é matematicamente válido, use a ferramenta de validação com dígitos verificadores.
- Número com formato correto e dígitos corretos ainda pode não pertencer a ninguém. Só a Receita Federal sabe se o CPF existe e qual é a situação dele; nenhum regex nem cálculo responde isso.
- Em campos de formulário, as pessoas colam o CPF com espaços sobrando no começo ou no fim. Aplique trim antes de testar, ou o padrão ancorado recusará um número perfeitamente bom.
- No Python e no C#, o atalho \d aceita dígitos de outros alfabetos por padrão. Use [0-9] nesses ambientes, como nos trechos de código desta página, para ficar igual ao JavaScript.
Código pronto
JavaScript
const re = new RegExp("^(?:\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}|\\d{11})$");
console.log(re.test(texto.trim()));
Python
import re
re_cpf = re.compile(r"[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}|[0-9]{11}")
print(bool(re_cpf.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]{2}|[0-9]{11})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Esse regex valida CPF?
Valida apenas a aparência: quantidade de dígitos e pontuação. A validação de verdade calcula os dois dígitos finais a partir dos nove primeiros e compara. Faça as duas etapas: regex para recusar lixo rápido, cálculo para recusar número inventado.
Devo aceitar o CPF só com números ou só formatado?
Aceite os dois na entrada, porque as pessoas digitam de qualquer jeito, e guarde sempre só os onze dígitos. Formate apenas na hora de mostrar. Assim buscas e comparações não dependem da pontuação.
Os exemplos desta página são CPFs de pessoas reais?
Não. Foram gerados pelo cálculo dos dígitos verificadores a partir de sequências escolhidas, sem consulta a qualquer cadastro. Têm dígitos corretos para servir de teste, mas não foram tirados de ninguém. Não use em cadastros reais.