Publicidade (Anuncie Aqui)

Validação de e-mail no PHP com Expressões Regulares

Expressões regulares são uma funcionalidade incrível… É possível interagir com strings e verificar a sua sintaxe…

Normalmente se usa regexp (Regular Expression) pra algumas tarefas simples mas muito úteis: como validar um e-mail, validar uma url, validar a formatação de uma senha que precise ter no minimo 2 letras, 6 números e 7 caracteres… Isso tudo pode e deve ser validado com expressões regulares.

Antes de mostrar o código da validação de e-mail, vou fazer uma breve introdução aos possíveis “formatos” de uma regexp… Nem todas serão usadas, mas é bom que vocês já vejam tudo que é possível fazer:

  • \s -> Significa um espaço em branco
  • ^ -> Significa o início da string
  • $ -> Significa o fim da string
  • . -> Significa qualquer caractere
  • (bola|casa) -> Significa bola ou casa
  • [0-9] ->Significa qualquer número entre zero e nove
  • [a-z] -> Significa qualquer letra minúscula
  • [A-Z] -> Significa qualquer letra maiúscula
  • [^a-z] -> Significa a não ocorrência (falta / proibição) de letras minúsculas. O circunflexo (^) tem significado de ‘não existe’
  • ? -> Significa nenhuma ou uma ocorrência caractere anterior
  • * -> Significa nenhuma ou várias ocorrências do caractere anterior
  • + -> Significa – no mínimo – uma ocorrência do caractere anterior
  • {3} -> Significa exatamente três caracteres
  • {3,} -> Significa três ou mais caracteres
  • {3,6} -> Significa entre três e seis caracteres, pode ser 4, 5 também

Mas calma… Onde isso tudo vai?

Vamos a um exemplo simpes… Uma regexp pra verificar um nome de usuario que precise ter no mínimo 5 caracteres e possa ser composto apenas por letras minusculas e números: ^[a-z0-9]{5,}$

Sacaram? O nome desse ‘bloco’ da regexp é chamado pattern, ou padrão. Ao validar uma string você compara um pattern com uma string, e se ela validar, ou seja, cumprir as condições, a string está dentro do formato.

Agora vamos ao código de validação de e-mail, ele é bem simples:

// Define uma função que poderá ser usada para validar e-mails usando regexp
function validaEmail($email) {
$conta = "^[a-zA-Z0-9\._-]+@";
$domino = "[a-zA-Z0-9\._-]+.";
$extensao = "([a-zA-Z]{2,4})$";

$pattern = $conta.$domino.$extensao;

if (ereg($pattern, $email))
return true;
else
return false;
}

// Define uma variável para testar o validador
$input = "meuemail@dominio.com.br";

// Faz a verificação usando a função
if (validaEmail($input)) {
echo "O e-mail inserido é valido!";
} else {
echo "O e-mail inserido é invalido!";
}

Agora vamos explicar o script… Dividi a pattern em três partes pra ficar mais fácil de entender, usaremos o e-mail contato@thiagobelem.net como exemplo:

^[a-zA-Z0-9\._-]+@
Essa parte é responsável por validar o que vem antes da @.. A conta do e-mail (seria o contato@ do e-mail). Podemos ver que – após o início da string – ela precisa ter pelo menos um caractere e pode ser composta por letras minúsculas, letras maiúsculas, números, ponto, sublinhado (underscore) e hífen. Depois desses caracteres, vem o @.

[a-zA-Z0-9\._-]+.
Essa parte é responsável pela sintaxe do domínio (seria o thiagobelem. do e-mail)… Ele deve ser composto por um ou mais letras minúsculas, letras maiúsculas, números, pontos, underscores e hífens. E logo após o domínio, vem um ponto. Repare que o ponto está escapado, ou seja: tem uma barra antes dele. Isso acontece pro que o . faz parte dos ‘formatos’ usados numa regexp e significa “qualquer caractere”. Se no e-mail tivesse ‘.com.br’, o .com faria parte desse bloco e não do próximo.

([a-zA-Z]{2,4})$
Essa é a ultima parte, responsável pela sintaxe do tld (extensão do domínio, que seria o net do e-mail)… Ele deve ter de dois a quatro caracteres, sendo eles letras minúsculas e/ou letras maiúsculas. Ele também é a última coisa do e-mail, então logo após ele vem o fim da string, o fim do e-mail.

Com tudo isso o nosso e-mail está validado e você tem um validado de e-mails pronto pra ser usado!

E aí? Gostaram? Comentem! ;-)

Você também vai gostar de ler:

Postado em PHP, Tutoriais

Com as tags , , , , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

  • Antonio
    Tenho encontrado soluções a muitos problemas pesquisando neste blog. Obrigado, e parabéns, Thiago. Não estou jogando confete, não.
  • Valeu Thiago, sempre acompanho seus artigos e são muito bem explicados, expressões regulares sempre foi um dilema para mim, com esse artigo ficou muito fácil começar entender algumas funcionalidades.

    Um grande abraço e continue assim.
  • Klawdyo
    Você deveria trocar o ereg pelo preg.
  • J
    Thiago, e se eu digitar: teste@teste.com.br.net.seila.com???

    ele irá dizer q eh valido... e não é!

    soh pode ter APENAS 2 pontos depois do @ correto??

    abraço
  • @J
    Não, pois podem existir e-mails em subdomínios de domínios com TDL extenso.. Então contato@meusubodminio.dominio.com.br é válido e tem 3 pontos. :)
  • Olá, eu também fiz uma postagem sobre validação de email, só que usei um método muito funcional, que verifica se realmente o host existe.

    http://www.gasparimsat.com/index.php/21/08/2009/validacao-do-email-pelo-host-usando-php/

    Ex: A pessoa escreve email@bol.com.br, ele verifica se o host "Bol" existe.
  • mateus
    eu só não concordo com uma coisa, eu sempre aprendi q um e-mail não pode ter letra maiúscula no nome do usuário, então pq vc botou q podia?
  • @Mateus
    Por que pode. :)
  • Wiclef Jeandson
    Bem legal sou um iniciante na área nunca vou chegar ao seu nível de conhecimento mas, tô tentando

    valew.
  • @Rodrigo

    Havia um erro no artigo... Tem uma barra antes do ponto pra "escapar" ele e evitar que ele seja considerado como "qualquer caractere".

    Dá uma olhada novamente nas expressões regulares do tutorial. ;)
  • Rodrigo Berriel
    Muito legal...

    Eu usava um outro validador, muito mais complexo, mais lento até... esse é muito mais simples, mais organizado. Legal a estrutura dele...

    Eu só não entendi essa parte: "tem uma barra antes dele"... que barra?

    A explicação como sempre, bem direta, objetiva. Parabéns...

    Obrigado!
  • Muito bom saber disso.
    Quando precisar disso irei usar com certeza.
    Valeu
blog comments powered by Disqus