Regex para endereço de e-mail

Use /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ para verificar se uma string inteira é um endereço de e-mail válido. Cada exemplo abaixo foi testado contra o padrão, e você pode abri-lo no Testador de Regex com os exemplos já carregados.

Atualizado em

/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/
Abrir no Testador de Regex
EntradaResultado
user@example.com✓ Correspondência
first.last+news@mail.example.co.uk✓ Correspondência
x_y%z@sub.domain.io✓ Correspondência
plainaddress✗ Sem correspondência
@example.com✗ Sem correspondência
user@domain✗ Sem correspondência
user name@example.com✗ Sem correspondência
user@@example.com✗ Sem correspondência

Como o padrão funciona

ParteSignificado
^Início da string
[A-Za-z0-9._%+-]+A parte local: uma ou mais letras, dígitos, pontos, sublinhados, sinais de porcentagem, de mais ou hífens
@Um @ literal
[A-Za-z0-9.-]+O nome do domínio, incluindo subdomínios
\.Um ponto literal antes do domínio de topo
[A-Za-z]{2,}O domínio de topo: duas ou mais letras (com, io, museum)
$Fim da string

Exemplos de código

JavaScript

const re = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}', value))

PHP

preg_match('/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/', $value) === 1;

Notas e limitações

Este é o padrão prático que a maioria dos formulários de cadastro usa. Ele aceita alguns endereços tecnicamente estranhos (dois pontos seguidos) e rejeita alguns válidos raros (partes locais entre aspas, domínios com endereço IP). O único teste real de um e-mail é enviar um link de confirmação. Em formulários HTML, <input type="email"> já oferece validação do navegador sem nenhum esforço extra.

Perguntas frequentes

Qual é a regex para endereço de e-mail?
/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/ — ela corresponde à string inteira. Veja a tabela acima para entender o que cada parte faz.
Quais exemplos correspondem?
Dos exemplos testados, estes correspondem: user@example.com, first.last+news@mail.example.co.uk, x_y%z@sub.domain.io. Os outros não correspondem.
Como testo essa regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo são carregados automaticamente, e as correspondências são destacadas conforme você edita.