Validar um endereço email em PHP

Verificar a validez de um endereço de correio electrónico, isto é, verificar que um email está bem relatado.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 27/9/04

Valorize este artigo:
Vamos ver uma função muito útil em PHP que serve para verificar a validez de um correio. Na realidade verifica se um endereço de correio electrónico está bem escrito sintaticamente, deixando de lado as comprovações de se o mail existe ou não realmente, as quais não se podem fazer tão facilmente.

Vamos escrever uma função que se chama verificar_email e recebe a cadeia de texto com o email que queremos validar. Se o mail é correcto desde o ponto de vista sintático, isto é, se tem um nome de usuário, uma arroba e uma terminação como o nome de um domínio ou subdomínio, etc, retornará um 1, é dizer, verdadeiro. No caso de que o mail não esteja correctamente escrito, a função retornaria 0, que equivale a falso.

A função em si considera, num principio que o email é errôneo e realiza uma serie de comprovações que, se todas respondem corretamente, dão como conclusão que o email estava correcto. Se alguma de esas comprovações não era correcta, não se chegaria ao fim das comprovações e obteríamos como resultado como se supôs ao principio,isto é, como incorrecto.

Código da função

function verificar_email($email){
   $mail_correcto = 0;
   //verifico umas coisas
   if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
      if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
         //vejo se tem caracter .
         if (substr_count($email,".")>= 1){
            //obtenho a terminação do dominio
            $term_dom = substr(strrchr ($email, '.'),1);
            //verifico que a terminação do dominio seja correcta
         if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
            //verifico que o de antes do dominio seja correcto
            $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
            $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
            if ($caracter_ult != "@" && $caracter_ult != "."){
               $mail_correcto = 1;
            }
         }
      }
   }
}

if ($mail_correcto)
   return 1;
else
   return 0;
}


As comprovações

No primeiro if verifico que o email tem pelo menos 6 caracteres (o mínimo), que tem uma arroba e só uma e que não está colocada nem no principio nem no fim.

No segundo if verifica que não tem alguns caractres não permitidos. E os restantes fazem comprovações das diferentes partes do endereço de correio.

Finalmente, restornamos a variável local utilizada para guardar a validez ou incorreção do endereço.





Comentários do artigo
Foram enviados 6 comentários ao artigo
3 comentários não revisados
3 comentários revisados:
Por: Miguel
22/10/05
Muito complexo, bastava usar expressão regular e com uma linha de código já teria feito tudo isso...epa, exagerei, seria mais de uma linha, mas seria mais fácil.
Por: rafael
25/10/06
esperimente colocar por exemplo:

rafael.exe@hotma

da erro.
Melhor assim
Por: Daniel
09/2/09
/**
* Esta função verifica se uma string dada em $strEmail é um endereço de e-mail válido
* @version 1.0
* @created sábado, 7 de abril de 2007
* @param string $strEmail
* @author Leandro Vieira
*/
function apiki_isEmail($strEmail) {
if ( preg_match('/^([w.-]+)+@+([w.-]+)+.+[a-z]{2,3}$/',$strEmail) ) {
return true;
} else {
return false;
}
}

Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Buscar projetos:

Home | Sobre nós | Copyright | Anuncie | Entrar em contato