Foros del Web » Programando para Internet » PHP »

Ayuda con expresiones regulares

Estas en el tema de Ayuda con expresiones regulares en el foro de PHP en Foros del Web. Estimados, estoy tratando de hacer una script que me valide una direccion de email, pero me da error en direcciones del estilo matias@hotmail , o ...
  #1 (permalink)  
Antiguo 26/02/2008, 15:58
 
Fecha de Ingreso: enero-2008
Ubicación: Mendoza, Argentina
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Exclamación Ayuda con expresiones regulares

Estimados, estoy tratando de hacer una script que me valide una direccion de email, pero me da error en direcciones del estilo matias@hotmail, o sea, sin el .com al final
Las otras pruebas me las valida o invalida correctamente. La pregunta es, como hago para obligar a que exista al menos un punto despues del @?

El código de la expresión es el siguiente
Código PHP:
ereg("([a-z0-9\.]+)@([a-z0-9]).([a-z0-9+\.]{2,4})",$email
Muchas gracias
  #2 (permalink)  
Antiguo 26/02/2008, 16:02
Avatar de zick  
Fecha de Ingreso: mayo-2007
Ubicación: Los Angeles - Chile
Mensajes: 168
Antigüedad: 17 años
Puntos: 2
Re: Ayuda con expresiones regulares

Amigo:

http://www.forosdelweb.com/f18/validar-email-php-95965/

Puede serle de utilidad..

Salud!
  #3 (permalink)  
Antiguo 26/02/2008, 16:03
(Desactivado)
 
Fecha de Ingreso: febrero-2008
Ubicación: Argentina, Santa Fe, Rosario
Mensajes: 350
Antigüedad: 16 años, 2 meses
Puntos: 5
Re: Ayuda con expresiones regulares

ereg("([a-z0-9\.]+)@([a-z0-9]+).([a-z0-9+\.]{2,4})",$email)


Yo creo que es por el "+"



Suerte!
  #4 (permalink)  
Antiguo 26/02/2008, 16:17
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 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.
  #5 (permalink)  
Antiguo 26/02/2008, 18:14
 
Fecha de Ingreso: enero-2008
Ubicación: Mendoza, Argentina
Mensajes: 10
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Ayuda con expresiones regulares

Gracias a todos por la ayuda!
Finalmente modifique la expresion tomando un poquito de todo lo que me dieron.

Finalmente quedo asi:

Código PHP:
ereg("([a-z0-9\.]+)@([a-z0-9\.-]+)\.([a-z]{2,4})",$email
No estaba tan lejos :D

Gracias a todos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:21.