Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/02/2008, 16:17
Avatar de Carlojas
Carlojas
 
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 19 años, 4 meses
Puntos: 49
Re: Ayuda con expresiones regulares

Prueba esta funcion muy acertada para lo que deseas:

Código PHP:
// FUNCION VALIDAR CORREO.             
function check_email_address($email)  
{ 
// PRIMERO CHECAR QUE HAY UN SOLO SIMBOLO @ Y QUE LOS DEMAS SEAN LARGOS. 
  
if(!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))  
  { 
     
// CORREO INVALIDO POR NUMERO INCORRECTO DE CARACTERES , O NUMERO INCORRECTO DE SIMBOLOS @ 
    
return false; 
  } 
     
  
// SE DIVIDE EN PARTES PARA HACERLO MAS SENCILLO. 
  
$email_array = explode("@", $email); 
  
$local_array = explode(".", $email_array[0]); 
  for(
$i = 0; $i < sizeof($local_array); $i++)  
  { 
     if(!
ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i]))  
     { 
        return 
false; 
     } 
  }  
     
  
// SE REVISA SI EL DOMINIO ES UNA IP. SI NO, DEBE SER UN NOMBRE DE     DOMINIO VALIDO 
     
if(!ereg("^\[?[0-9\.]+\]?$", $email_array[1]))  
     {  
          
$domain_array = explode(".", $email_array[1]); 
         
          if(
sizeof($domain_array) < 2)  
          { 
            return 
false; // NO SON SUFICIENTES PARTES O SECCIONES PARA SER UN DOMINIO. 
          
} 
          for(
$i = 0; $i < sizeof($domain_array); $i++)  
          { 
                if(!
ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i]))  
                { 
                      return 
false; 
                } 
          } 
      } 
          return 
true; 
} 
Y validas el correo de esta manera

Código PHP:
if(check_email_address($mail)) 
{ 
    
// envias el mensaje  
} 
else 
{   
   echo 
"la direccion de correo electronico no es valida"; 
   echo 
"<a href = 'formulario.php'>Volver</a>";
   exit(); 
} 
Saludos.