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)>1 && strlen($term_dom)<5 && (!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.