Regex de placa de veículo (antiga e Mercosul)
Regex para placa de veículo brasileira nos dois modelos: antigo (ABC-1234) e Mercosul (ABC1D23). Confere só o formato, sem consultar o veículo.
O padrão
[A-Z]{3}-?\d{4}|[A-Z]{3}\d[A-Z]\d{2}
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
ABC-1234ABC1234ABC1D23XYZ9K88
Não casam
AB1-2345abc1d23ABC-12D4ABCD123ABC1D2
Como funciona, por partes
[A-Z]{3}-?\d{4}: Modelo antigo: três letras maiúsculas, hífen opcional e quatro números. O hífen aparece na placa física, mas costuma ser omitido ao digitar.[A-Z]{3}\d[A-Z]\d{2}: Modelo Mercosul: três letras, um número, uma letra e dois números, sempre nessa ordem (LLLNLNN), sem hífen. A letra na quinta posição substitui o segundo número do modelo antigo.Por que duas alternativas: As duas convivem nas ruas, então um cadastro de veículos precisa aceitar ambas. Separá-las também evita formatos híbridos inexistentes, como ABC-1D23.Maiúsculas: O padrão exige maiúsculas. Em formulários, converta o que a pessoa digitou com toUpperCase antes de testar, ou ative a flag i para aceitar minúsculas na entrada.O que ele não sabe: O regex não distingue combinações emitidas das não emitidas e não sabe a que estado a placa pertence.
Armadilhas
- Certas combinações de letras podem não ser emitidas; o regex aceita qualquer letra de A a Z. Para saber se a placa existe é preciso consultar o órgão de trânsito.
- Os dois modelos têm sete caracteres, então a contagem de caracteres sozinha não os distingue. A posição da letra na quinta casa é o que identifica o Mercosul.
- Placas de motos, caminhões e veículos oficiais seguem a mesma estrutura de caracteres, mas variam em cores e tamanho físico. O regex trata apenas dos caracteres.
- Não confunda a placa com o RENAVAM nem com o chassi: são identificadores diferentes, com regras diferentes, e este padrão não serve para eles.
Código pronto
JavaScript
const re = new RegExp("^(?:[A-Z]{3}-?\\d{4}|[A-Z]{3}\\d[A-Z]\\d{2})$");
console.log(re.test(texto.trim()));
Python
import re
re_placa_de_veiculo = re.compile(r"[A-Z]{3}-?[0-9]{4}|[A-Z]{3}[0-9][A-Z][0-9]{2}")
print(bool(re_placa_de_veiculo.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[A-Z]{3}-?[0-9]{4}|[A-Z]{3}[0-9][A-Z][0-9]{2})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Qual é o formato da placa Mercosul?
Três letras, um número, uma letra e dois números, como ABC1D23. O formato foi conferido em materiais publicados sobre o padrão de placas; antes de usar em um sistema oficial, confirme a regra vigente na norma do Contran e do Senatran, que é a fonte oficial.
Como aceitar a placa em minúsculas?
Adicione a flag i ao regex ou converta para maiúsculas antes de testar. Guarde sempre em maiúsculas e sem hífen para facilitar buscas.
O regex diz se o veículo existe?
Não. Ele só diz que a sequência de caracteres tem a forma de uma placa. Consultar o veículo depende de serviços oficiais e de autorização para isso.