<?php
   function valida_email($endereco){
      $pattern = "^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+\.[a-zA-Z0-9\-\.]+$";
     
      if (eregi($pattern, $endereco)){
         return true;
      }
      else {
         return false;
      }   
   }
?>   
 <html>
   <body> 
      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="emailForm">
        Email: <input type="text" name="email"><br/>
        <input type="submit" name="submitemail">
      </form>          
       <?php
         if (isset($_POST['submitemail']))
         {
            if (valida_email($_POST['email'])){
                echo "O email: ".$_POST['email']." é válido! ";
            }
            else{
                echo "O email: ".$_POST['email']." não é válido! ";
            }
         }
       ?>
    </body> 
 </html> 
Nesse código implementamos a função valida_email(). Uma vez implementada, essa função poderá ser chamada posteriormente no código. Essa função espera um parâmetro, que está representado por '$endereco' no código. Esse parâmetro será o endereço de e-mail que desejamos validar. Ao receber o parâmetro, ela o joga para a função ereg(), que pesquisa em '$endereco' para ver se encontra a expressão que lhe foi passada primeiramente. O que passamos para ereg() nesse caso foi:
^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-]+\.[a-zA-Z0-9\-\.]+$
Vamos explicar cada parte dessa expressão:
(1) ^[a-zA-Z0-9_\-\.]+ significa que ereg() deve procurar em '$endereco' algo que "inicie com pelo menos uma letra (de a até z e de A até Z), um número (de 0 até 9), underline (_), hífen (\-) ou ponto (\.) e posteriormente utilize, no máximo, uma combinação disso".
(2) @ significa que deve-se localizar um literal "@".
(3) [a-zA-Z0-9_\-]+ significa que deve-se localizar algo que contenha caracteres alfanuméricos, hífens ou underlines.
(4) \. procura por um ".".
(5) [a-zA-Z0-9\-\.]+$ procura no restante do endereço letras, números, hífens e pontos até o final da string.
A função valida_email() então retorna "true" se ereg() encontrar o que busca e o e-mail for, portanto, válido. Se o e-mail for inválido, valida_email() retornará "false".
Na parte seguinte do código, chamamos a função valida_email() dentro de um if() para verificar se o endereço contido em '$email' é válido. Não abordei aqui a forma como o valor de '$email' lhe foi atribuído, mas usualmente isso seria feito através de um formulário. A função valida_email() recebe o valor de '$email' (que assume o papel de '$endereco') e faz a verificação. Se o valor retornado for "true" escreve-se na tela "O e-mail é válido!", mas se for "false" escreve-se "O e-mail não é válido!".
Para entendermos bem o que está acontecendo, façamos uma simulação. Para isso, faremos uma atribuição direta para '$email'. Podemos, por exemplo, substituir as linhas 11 e 12 do nosso código pelo seguinte:
$email = "teste_.-._01@servidor_-_01.com.br";
» Nesse caso, teste_.-._01@servidor_-_01.com.br é aprovado em (1) que encontra o que procura em teste_.-._01, é aprovado em (2) que encontra @, é aprovado em (3) que encontra o que procura em servidor_-_01, é aprovado em (4) que encontra . e é finalmente aprovado em (5) que encontra o que procura em com.br. Portanto, nesse caso, valida_email() retorna "true".
Agora, substituamos as linhas 11 e 12 por:
$email = "teste@a2*.";
» Nesse segundo caso, teste@a2 *. é aprovado em (1) que encontra o que procura em teste, é aprovado em (2) que encontra @, mas é reprovado em (3) que encontrou * que não procurava. A pesquisa pára aqui, mas caso ela continuasse, teste@a2*. seria aprovado em (4) que encontra . mas seria novamente reprovado em (5) que não possui mais string onde procurar. Portanto, valida_email() retorna "false".
OBS: ereg() retornará "false" somente se encontrar um caractere que não estava procurando (como no caso do *) ou se não encontrar nenhum dos caracteres que estava procurando. O fato de 'teste' não possuir números ou hífens não faz com que ele seja reprovado em (1).
Pronto! Agora você poderá reduzir consideravelmente os e-mails inválidos informados por usuários aos seus formulários, tendo em vista que é impossível criar um sistema que barre 100% dos e-mails inválidos. E lembre-se: tenha cuidado ao tornar as coisas mais restritivas, uma vez que uma função de validação que rejeita 1% dos dados válidos é muito mais irritante que uma que permite 10% de dados inválidos.
Fonte: Plugmasters : Michel Franscisco
Posted by Programador PHP
 
 
ta falha esse ER, pois ele aceita email assim:
ResponderExcluirdsdsa@dsdsadsa..dsa.com
abraços!!!