Logotipo do CataBits

CataBits

A máquina movida à bits

Regex para validar e-mails

Por André Luferat em 27/12/2023.

Regex para validar e-mails

O HTML5 usa uma regex específica para validar e-mails nos campos <input type="email">. A regex é definida pela especificação HTML5 e segue o padrão definido na especificação RFC 5322, que descreve o formato de endereços de e-mail.

A regex usada pelo HTML5 para validar e-mails é a seguinte:

^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*$

Esta regex verifica várias partes de um endereço de e-mail:

  • O nome de usuário (parte local do endereço de e-mail) pode conter letras maiúsculas e minúsculas, dígitos e alguns caracteres especiais como !#$%&'*+/=?^_{|}~-.;
  • O domínio deve começar com uma letra ou dígito, seguido opcionalmente por letras, dígitos ou hífens, e pode conter vários componentes de domínio separados por pontos (por exemplo, "example.com" ou "subdomain.example.co.uk").

Esta regex é usada pelos navegadores modernos quando você usa em um formulário HTML5 para validar automaticamente o campo de entrada de e-mail. Ela ajuda a garantir que o formato do endereço de e-mail seja válido, mas não verifica a existência real do endereço de e-mail, ok?

Você pode usar a mesma regex de e-mail que o HTML5 usa, em JavaScript, da seguinte maneira:

// Regex para validar endereços de e-mail, usada pelo HTML5  
// OBS: deve estar em uma única linha
const  regexEmailHTML5  =  /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/;

// E-mail a ser validado
const  email  =  "[email protected]";

// Valida e-mail
if (regexEmailHTML5.test(email)) {

    // Se o e-mail é válido, faça isso:
    console.log("O e-mail é válido.");

} else {

    // Se o e-mail é inválido, faça isso:
    console.log("O e-mail não é válido.");

}

Neste exemplo, a regexEmailHTML5 é a mesma regex que o HTML5 usa para validar endereços de e-mail em campos <input type="email">. Você pode usar o método test() do objeto regex para verificar se uma string corresponde a essa regex e, assim, validar o endereço de e-mail em JavaScript. O código acima imprimirá "O e-mail é válido." se o endereço de e-mail estiver no formato correto e "O e-mail não é válido." se não estiver.

No Python, podemos usar a função abaixo que valida e-mails usando como exemplo, uma versão simplificada da Regex usada no HTML5, já com um exemplo de uso:

import re

def validate_email(email):

    # Regex para validar endereços de e-mail, usada pelo HTML5
    # OBS: deve estar em uma única linha
    pattern = r'^[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*$'

    # Verifica se o e-mail corresponde ao padrão regex
    if re.match(pattern, email):
        return True
    else:
        return False

# Exemplo de uso:
email = "[email protected]"
if validate_email(email):
    print(f"O e-mail '{email}' é válido.")
else:
    print(f"O e-mail '{email}' não é válido.")

Quem precisa usar PHP, aqui está uma função análoga às anteriores, bem simples e que usa a mesma regex:

<?php

function validate_email($email)

{
    // Regex para validar endereços de e-mail
    $pattern = '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*$/';

    // Verifica se o e-mail corresponde ao padrão regex
    if (preg_match($pattern, $email)) return true;
    else return false;
}

// Exemplo de uso:
$email = "[email protected]";
if (validate_email($email)) {
    echo "O e-mail '{$email}' é válido.";
} else {
    echo "O e-mail '{$email}' não é válido.";
}
?>

Obviamente, essa regex pode ser ajustada para casos mais específicos como validar e-mails para um determinado domínio apenas...

Referências: HTML Living Standard

Comentários