Regex para CPF — Expressão Regular com e sem Máscara
Expressões regulares para capturar CPF em texto, validar formato em formulários e extrair números de documentos. A regex verifica apenas o formato — ela não calcula os dígitos verificadores.
Regex para CPF formatado
Captura CPF no padrão XXX.XXX.XXX-XX:
^\d{3}\.\d{3}\.\d{3}-\d{2}$
\d{3}— exatamente 3 dígitos\.— ponto literal-— traço literal^e$— ancoram no início e fim da string
Regex para CPF sem máscara
Captura CPF como 11 dígitos consecutivos:
^\d{11}$
Regex para ambos os formatos
Aceita CPF com ou sem pontuação:
^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$
O ? torna pontos e traço opcionais. Aceita 529.982.247-25, 52998224725 e formatos parciais como 529982247-25.
Regex para capturar CPF em texto
Para encontrar CPFs dentro de um texto maior (sem âncoras):
\b\d{3}\.\d{3}\.\d{3}-\d{2}\b
\b delimita a fronteira da palavra, evitando capturar partes de números maiores.
Regex com grupos de captura
Para extrair cada bloco separadamente:
^(\d{3})\.(\d{3})\.(\d{3})-(\d{2})$
Grupos: $1 = primeiro bloco, $2 = segundo, $3 = terceiro, $4 = dígitos verificadores.
Exemplos por linguagem
JavaScript
const regex = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
regex.test("529.982.247-25"); // true
regex.test("52998224725"); // false
// Aceitar ambos os formatos
const flexivel = /^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$/;
flexivel.test("529.982.247-25"); // true
flexivel.test("52998224725"); // true
Python
import re
padrao = r'^\d{3}\.\d{3}\.\d{3}-\d{2}$'
bool(re.match(padrao, "529.982.247-25")) # True
bool(re.match(padrao, "52998224725")) # False
# Capturar CPFs em texto
texto = "CPFs: 529.982.247-25 e 123.456.789-09"
cpfs = re.findall(r'\d{3}\.\d{3}\.\d{3}-\d{2}', texto)
# ['529.982.247-25', '123.456.789-09']
PHP
$regex = '/^\d{3}\.\d{3}\.\d{3}-\d{2}$/';
preg_match($regex, '529.982.247-25'); // 1 (true)
preg_match($regex, '52998224725'); // 0 (false)
// Capturar CPFs em texto
preg_match_all('/\d{3}\.\d{3}\.\d{3}-\d{2}/', $texto, $matches);
Go
import "regexp"
var cpfRegex = regexp.MustCompile(`^\d{3}\.\d{3}\.\d{3}-\d{2}$`)
cpfRegex.MatchString("529.982.247-25") // true
cpfRegex.MatchString("52998224725") // false
Tabela resumo
| Padrão | Regex | Exemplo |
|---|---|---|
| Formatado | ^\d{3}\.\d{3}\.\d{3}-\d{2}$ | 529.982.247-25 |
| Só dígitos | ^\d{11}$ | 52998224725 |
| Ambos | ^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$ | ambos |
| Em texto | \b\d{3}\.\d{3}\.\d{3}-\d{2}\b | busca em texto |
| Com grupos | ^(\d{3})\.(\d{3})\.(\d{3})-(\d{2})$ | extrai blocos |
Importante: regex valida apenas o formato, não os dígitos verificadores. Para validação completa, use uma função que implemente o algoritmo de módulo 11 — veja exemplos em 9 linguagens.