Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/04/2012, 06:15
Avatar de santris
santris
 
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 9 meses
Puntos: 66
Respuesta: comprobar validez email

Con el permiso de @tognaco aprovecho este tema para realizar una consulta:

Yo siempre he utilizado una función sin espresiones regulares para comprobar emails por optimización de tiempos.

Despues de ver este tema he realizado una comparativa entre funciones y el resultado me ha descolocado... ganan las espresiones regulares en tiempo.

Algún experto me podría verificar si he realizado la comparativa correctamente?

El resultado no es muy significativo pero hay está.

Código PHP:
    $email '[email protected]';
    function 
comprobar_email1($email){
        if (
preg_match('/^([a-zA-Z0-9\._]+)\@([a-zA-Z0-9\.-]+)\.([a-zA-Z]{2,4})/',$email)){
            echo 
'valid';    
        }
        else{
            echo 
'no valid';
        }
    }
    function 
comprobar_email2($email){
        
$mail_correcto 0;
        
//compruebo unas cosas primeras
        
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," "))) {
              
//miro si tiene caracter .
              
if (substr_count($email,".")>= 1){
                 
//obtengo la terminacion del dominio
                 
$term_dom substr(strrchr ($email'.'),1);
                 
//compruebo que la terminacion del dominio sea correcta
                 
if (strlen($term_dom)>&& strlen($term_dom)<&& (!strstr($term_dom,"@")) ){
                    
//compruebo que lo de antes del dominio sea 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)
           echo 
'valid';
        else
           echo 
'no valid';
    }
    function 
microtime_float()
    {
    list(
$useg$seg) = explode(" "microtime());
    return ((float)
$useg + (float)$seg);
    }
    echo 
microtime_float()."<br />";
    echo 
comprobar_email1($email)."<br />";
    echo 
microtime_float()."<br />";
    echo 
microtime_float()."<br />";
    echo 
comprobar_email2($email)."<br />";
    echo 
microtime_float()."<br />"
resultado:

Cita:
1335614994.9389
valid
1335614994.9389
1335614994.9389
valid
1335614994.939
edito: veo que el error está en usar la función microtime_float(), evidentemente el tiempo va pasando entre la comparativa, voy ha seguir con otas opciones.
__________________
Tu álbum de cromos online!!

Última edición por santris; 28/04/2012 a las 06:25