<?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!!!