Regex de CEP
Regex de CEP brasileiro, com ou sem hífen: cinco dígitos, hífen opcional e três dígitos. Só confere o formato; o endereço exige consulta a uma base de CEPs.
O padrão
\d{5}-?\d{3}
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
01001-0000100100070040-01030140071
Não casam
1234-56712345-67123456789ab123-45612345--678
Como funciona, por partes
\d{5}: Os cinco primeiros dígitos do CEP, que indicam região, setor, subsetor e divisão do código postal.-?: Hífen opcional. Muita gente digita o CEP sem ele, e os sistemas costumam guardar só os oito dígitos.\d{3}: Os três dígitos finais, o sufixo de distribuição.Âncoras: Sem ^ e $, o padrão acha um CEP dentro de um texto maior, e também dentro de números longos. Para validar um campo, ancore o padrão.Variações: Para aceitar também espaço ou ponto como separador, troque o hífen por [-. ]?; o padrão desta página mantém a regra mais comum.
Armadilhas
- Oito dígitos com forma certa não são necessariamente um CEP que exista. Só uma consulta a uma base de endereços confirma que o código está atribuído.
- Aceitar o formato 00000-000 é inevitável com um regex simples. Se isso importa, adicione uma checagem extra para recusar o CEP todo zerado.
- Guarde o CEP como texto, nunca como número: CEPs começados em zero perdem o primeiro dígito quando viram inteiro, e 01001-000 vira 1001000.
- Sem âncoras, o padrão encontra CEP dentro de um número maior, como um código de rastreio de 13 dígitos. Use ^ e $ ao validar campos.
Código pronto
JavaScript
const re = new RegExp("^(?:\\d{5}-?\\d{3})$");
console.log(re.test(texto.trim()));
Python
import re
re_cep = re.compile(r"[0-9]{5}-?[0-9]{3}")
print(bool(re_cep.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[0-9]{5}-?[0-9]{3})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Dá para descobrir a cidade a partir do regex?
Não. O regex só olha a forma. Para obter rua, bairro e cidade é preciso consultar um serviço ou base de CEPs, e isso acontece fora do navegador, com a pessoa ciente de que o número será enviado ao serviço.
O hífen deve ser obrigatório?
Em campo digitado, não: aceite com e sem. Normalize para oito dígitos ao salvar e coloque o hífen só ao exibir, como em etiquetas e telas.
Existe CEP com letras?
No Brasil o CEP é numérico, com oito dígitos. Letras indicam erro de digitação ou outro sistema de código postal, como o de outros países.
Como tratar o CEP em planilhas?
Formate a coluna como texto antes de colar os dados. Se o programa já converteu para número, os zeros iniciais sumiram: recomponha com preenchimento à esquerda até oito dígitos e só depois aplique o padrão. Também vale remover espaços e pontos que vêm de cópias de sites.