Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: el-brujo en 8 Mayo 2012, 19:38 pm



Título: Validación e-mail formulario
Publicado por: el-brujo en 8 Mayo 2012, 19:38 pm
Validar e-mail:

Código
  1. function verify_email($email){
  2.  
  3.    if(!preg_match('/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/',$email)){
  4.        return false;
  5.    } else {
  6.        return $email;
  7.    }
  8. }

Código
  1.    function EmailValidation($email)
  2.    {
  3.    $email = htmlspecialchars(stripslashes(strip_tags($email))); //parse unnecessary characters to prevent exploits
  4.    if ( eregi ( '[a-z||0-9]@[a-z||0-9].[a-z]', $email ) )
  5.    { //checks to make sure the email address is in a valid format
  6.    $domain = explode( "@", $email ); //get the domain name
  7.    if ( @fsockopen ($domain[1],80,$errno,$errstr,3))
  8.    {
  9.    //if the connection can be established, the email address is probably valid
  10.    return true;
  11.    } else
  12.    {
  13.    return false; //if a connection cannot be established return false
  14.    }
  15.    return false; //if email address is an invalid format return false
  16.    }
  17.    }



Código
  1. function validar_email($email) {
  2.  
  3. list($local, $domain) = explode("@", $email);
  4.  
  5. $pattern_local = '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$';
  6. $pattern_domain = '^([0-9a-z]+([-]?[0-9a-z]+)*)(([-]?)\.([-]?)[0-9a-z]*([-]?[0-9a-z]+)+)*\.[a-z]{2,4}$';
  7.  
  8. $match_local = eregi($pattern_local, $local);
  9. $match_domain = eregi($pattern_domain, $domain);
  10.  
  11. if ($match_local && $match_domain) {
  12. return 1;
  13. } else {
  14. return 0;
  15. }
  16. }

En PHP 5:

Se añade la funcionalidad de filter_var

Código
  1. if(filter_var("prueba@dominio.com", FILTER_VALIDATE_EMAIL)){
  2. echo "Ok";
  3. } else {
  4. echo "Error";
  5. }

Usando filter _var y comprobando que tenga un punto el dominio con una expresión regular:

Código
  1. function validateEmailAddress($email) {
  2.    return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email);
  3. }

Ejemplo Wordpress (usando expresiones regulares)

Código
  1.    function is_email($email) {
  2.     if( strlen( $email ) < 3 ){
  3.      return false;
  4.     }
  5.     if( strpos( $email, '@', 1 ) === false ){
  6.      return false;
  7.     }
  8.     list( $local, $domain ) = explode( '@', $Valor, 2 );
  9.     if( !preg_match( '/^[a-zA-Z0-9!#$%&\'*+\/=?^_`{|}~\.-]+$/', $local ) ){
  10.      return false;
  11.     }
  12.     if( preg_match( '/\.{2,}/', $domain ) ){
  13.      return false;
  14.     }
  15.      if( trim( $domain, " \t\n\r\0\x0B." ) !== $domain ){
  16.      return false;
  17.     }
  18.      $subs = explode( '.', $domain );
  19.      if( 2 > count( $subs ) ){
  20.      return false;
  21.     }
  22.     foreach ( $subs as $sub ) {
  23.      if( trim( $sub, " \t\n\r\0\x0B-" ) !== $sub ){
  24.       return false;
  25.      }
  26.      if( !preg_match('/^[a-z0-9-]+$/i', $sub ) ){
  27.       return false;
  28.      }
  29.     }
  30.     return true;
  31.    }


Verificar e-mail mirando registro MX si es válido,  útil para separar nombre y dominio de un e-mail


Código
  1. function verify_email_dns($email){
  2.  
  3.    // This will split the email into its front
  4.    // and back (the domain) portions
  5.    list($name, $domain) = explode('@',$email);
  6.  
  7.    if(!checkdnsrr($domain,'MX')){
  8.  
  9.        // No MX record found
  10.        return false;
  11.  
  12.    } else {
  13.  
  14.        // MX record found, return email
  15.        return $email;
  16.  
  17.    }
  18. }


Código
  1. $string = 'some_name@somedomain.com';
  2. $res = explode('@', $string);
  3. // array
  4. echo $res[0];
  5. $name = $res[0];
  6. echo $name;


substr

Código
  1. $mail = "some_name@somedomain.com";
  2. echo substr($mail, 0, strpos($mail, '@') );
  3.  

explode

Código
  1. list($name, $domain) = explode('@', $mail);
  2. echo $name;


Título: Re: Validación e-mail formulario
Publicado por: Graphixx en 9 Mayo 2012, 20:26 pm
Muy muy bueno este material para depurar Bases de Datos, sobretodo lo de la comprobacion de registros MX.


Título: Re: Validación e-mail formulario
Publicado por: :ohk<any> en 10 Mayo 2012, 19:37 pm
Que ha pasado, un aporte del el-brujo.
Se nota que hace rato que no paso por el foro.
Excelente.

Saludos


Título: Re: Validación e-mail formulario
Publicado por: ~ Yoya ~ en 11 Mayo 2012, 16:55 pm
De todas creo que esta es la mas rápida:
Código
  1. if(filter_var("prueba@dominio.com", FILTER_VALIDATE_EMAIL)){
  2. echo "Ok";
  3. } else {
  4. echo "Error";
  5. }

Igual la 2º y 3º no es recomendado su uso ya que ocupan eregi para su funcionamiento y esa funcion es obsoleta desde PHP >= 5.3.0.

Saludos.


Título: Re: Validación e-mail formulario
Publicado por: jhonatanAsm en 12 Mayo 2012, 03:21 am
es la mas rápida... ,
   y la más segura (aunque en estos tiempos, la que menos fallos se le puedan encontrar) ??

salu2.