Regex de e-mail (simplificado)
Regex simplificado de e-mail para triagem de campos de formulário. Pega erros óbvios; e-mail perfeito por regex é impraticável, a prova final é enviar uma mensagem.
O padrão
[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{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
Não casam
ana@@exemplo.comana@exemploana [email protected]ana@@x.com
Como funciona, por partes
[A-Za-z0-9._%+-]+: Parte local, antes do @: letras, números e os símbolos comuns ponto, sublinhado, porcentagem, mais e hífen, em qualquer quantidade a partir de um caractere.@: Exatamente um arroba literal separando usuário e domínio.[A-Za-z0-9-]+: Primeiro rótulo do domínio: letras, números e hífen, como exemplo em exemplo.com.(?:\.[A-Za-z0-9-]+)*: Rótulos adicionais, cada um precedido por ponto, como o com em exemplo.com.br. O asterisco aceita nenhum ou vários.\.[A-Za-z]{2,}: Por fim, o ponto e a terminação com duas ou mais letras, como br, com ou online. Isso recusa domínios sem terminação.
Armadilhas
- Escrever um regex que aceite exatamente os e-mails válidos segundo a especificação é impraticável: a regra permite aspas, comentários e caracteres raros, e os provedores impõem restrições adicionais. Este padrão é uma triagem, não uma garantia.
- Ele recusa endereços legítimos pouco comuns, como os com acentos no usuário ou domínios internacionalizados. Se o seu público os usa, afrouxe o padrão e valide por envio.
- Aceita endereços que não existem, como [email protected]. A única forma confiável de saber é enviar uma mensagem com um link de confirmação e esperar o clique.
- Não use a validação como defesa de segurança. Passar no regex não torna a entrada segura para banco de dados, HTML ou cabeçalhos; trate a entrada separadamente.
Código pronto
JavaScript
const re = new RegExp("^(?:[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,})$");
console.log(re.test(texto.trim()));
Python
import re
re_email_simplificado = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}")
print(bool(re_email_simplificado.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Por que não existe o regex perfeito de e-mail?
Porque a especificação aceita formas que quase ninguém usa e porque a existência de uma caixa postal não é questão de formato. O padrão mais longo ainda erra para os dois lados. A saída prática é um regex simples mais confirmação por e-mail.
Posso usar o input type email do HTML?
Pode, e ele já faz uma triagem parecida. Use este regex quando o dado vem de planilhas, textos colados ou arquivos, em que não há campo de formulário para fazer a checagem.
Maiúsculas importam no endereço?
Na prática, os provedores tratam o usuário sem diferenciar maiúsculas. Normalize para minúsculas ao guardar, para evitar duplicidade, e use o padrão como está.
O que fazer com e-mails recusados?
Mostre uma mensagem clara e deixe a pessoa corrigir, em vez de apagar o campo. Erros de digitação comuns são o arroba ausente e o espaço no fim do texto.