Foros del Web » Programando para Internet » PHP »

Problemas validar direccion de correo

Estas en el tema de Problemas validar direccion de correo en el foro de PHP en Foros del Web. Buenas, Alguien me podría decir porque aparece este error en la validación de la dirección de correo? He sacado el ejemplo de las FAQ de ...
  #1 (permalink)  
Antiguo 05/01/2010, 16:16
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Problemas validar direccion de correo

Buenas,

Alguien me podría decir porque aparece este error en la validación de la dirección de correo? He sacado el ejemplo de las FAQ de PHP

Pero lo he tenido que adaptar porque la función eregi estaba deprecated

Código PHP:
Ver original
  1. <?php
  2.  
  3. // VALIDAR EMAIL
  4.  
  5. function valida_email($email){
  6.     $email_correcto = "(^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*)@([0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\.[0-9a-zA-Z]{2,3})$";
  7.     $caracteres_extranos = "^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$";
  8.  
  9.     // Validamos la dirección, usamos caracteres comunes
  10.     if (preg_match($email,$email_correcto)) {
  11.         echo("La dirección <i>$email</i> es válida.");
  12.         return true;
  13.     }
  14.  
  15.     /* Validamos la dirección, tomamos en cuenta que algunos proveedores permiten caracteres extraños.*/
  16.     else if (preg_match($email,$caracteres_extranos)) {
  17.         echo("La dirección <i>$email</i> contiene caracteres extraños, pero comúnmente no afecta el script. Se tomará como válida.");
  18.     }
  19.      
  20.     // Si nada de lo anterior pasa... return false
  21.     else {
  22.         echo("La dirección <i>$email</i> no es válida.");
  23.         return false;
  24.     }
  25. }
  26. valida_email($email);
  27. ?>
  28.  
  29. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  30. <html xmlns="http://www.w3.org/1999/xhtml">
  31. <head>
  32. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  33. <title>Validar EMAIL</title>
  34. </head>
  35. <body>
  36. <form id="form" name="form" method="post" action="validar_email.php">
  37.     <label>EMAIL
  38.       <input name="email" type="text" id="email" value="<?php echo $email;?>" />
  39.     </label>
  40.   <p>
  41.     <label>
  42.       <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
  43.     </label>
  44.   </p>
  45. </form>
  46. </body>
  47. </html>

Me muestra el siguiente codigo de error

Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\AppServ\www\00-laboratorio_test\secciones\formularios\validar_ema il.php on line 10

Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\AppServ\www\00-laboratorio_test\secciones\formularios\validar_ema il.php on line 16


También he buscado en la red y me ha llamado la atención su simplicidad
http://fr.php.net/manual/en/function.filter-var.php

Me he puesto a testearla y creo que no cumple con todos los casos... ya que si pongo caracteres tipo %$ en el nombre de usuario del correo lo detecta como un correo válido

Es correcto? la habéis utilizado alguna vez? existen correos con % y $ en su dirección?

Código PHP:
Ver original
  1. <?php
  2. function valida_email($email){
  3.     return filter_var($email, FILTER_VALIDATE_EMAIL);
  4. }
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  10. <title>Validar EMAIL</title>
  11. </head>
  12. <body>
  13. <form id="form" name="form" method="post" action="validar_email2.php">
  14.     <label>EMAIL
  15.       <input name="email" type="text" id="email" value="<?php echo $email;?>" />
  16.     </label>
  17.   <?php if (valida_email($_POST['email'])){
  18.             echo "CORRECTO";
  19.         }else{ echo "INCORRECTO"; } ?>
  20.     <label>
  21.       <input type="submit" name="Enviar" id="Enviar" value="Enviar" />
  22.     </label>
  23. </form>
  24. </body>
  25. </html>

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 05/01/2010, 16:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Problemas validar direccion de correo

Te falta declarar un delimitador, pero que sea aceptado. El delimitador debe estar al principio y al final del codigo y debe ser el mismo caracter que uses. Para que tengas una idea te sugiero que mires este aporte http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 05/01/2010, 17:38
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Problemas validar direccion de correo

Cita:
Iniciado por abimaelrc Ver Mensaje
Te falta declarar un delimitador, pero que sea aceptado. El delimitador debe estar al principio y al final del codigo y debe ser el mismo caracter que uses. Para que tengas una idea te sugiero que mires este aporte http://www.forosdelweb.com/f18/aport...s-pcre-646110/
Vale... se por donde vas

El primer if me funcionó, agregé / al principio y al final.

Código PHP:
Ver original
  1. if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email)){
  2.     //if (preg_match($email,$email_correcto)) {
  3.         echo("La dirección <i>$email</i> es válida.");
  4.         return true;
  5.     }

Sin embargo el segundo no...

Código PHP:
Ver original
  1. /* Validamos la dirección, tomamos en cuenta que algunos proveedores permiten caracteres extraños.*/
  2.     elseif (preg_match("/^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$/",$email)) {
  3.         echo("La dirección <i>$email</i> contiene caracteres extraños, pero comúnmente no afecta el script. Se tomará como válida.");
  4.     }

Warning: preg_match() [function.preg-match]: Unknown modifier '=' in C:\AppServ\www\00-laboratorio_test\secciones\formularios\validar_ema il.php on line 18

Por qué no le gusta¿?
  #4 (permalink)  
Antiguo 05/01/2010, 18:03
Avatar de bioxido  
Fecha de Ingreso: diciembre-2008
Ubicación: $_SERVER['PHP_SELF']
Mensajes: 601
Antigüedad: 15 años, 5 meses
Puntos: 21
Respuesta: Problemas validar direccion de correo

Que tal si intentas con esta otra funcion:

Código PHP:
function comprobar_email($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 terminación 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
       return 
1
       
    else 
       return 
0
       

  #5 (permalink)  
Antiguo 06/01/2010, 07:31
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Problemas validar direccion de correo

Cita:
Iniciado por bioxido Ver Mensaje
Que tal si intentas con esta otra funcion:
Gracias bioxido pero esa de ahi la conocía, es la misma que
http://www.desarrolloweb.com/articulos/990.php

La solución no es coger otra función hecha, sino saber el motivo de porque esta fallando esa linea, ya que el problema está ahí.

A ver si alguien puede orientarnos!

Muchas gracias
  #6 (permalink)  
Antiguo 06/01/2010, 07:33
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Problemas validar direccion de correo

Código PHP:
Ver original
  1. /**
  2.  * Valid email entered or return your information separately
  3.  *
  4.  * @param   $email string
  5.  * @param   $data boolean[optional]
  6.  * @return  boolean or array information
  7.  */
  8. function valida_email($email,$data=false){
  9.     $pattern = '/^([\w\d\.-]{1,50})@{1}([\w\d-]{1,50})\.{1}([\w\d-]{1,5})(?:\.{1}([\w\d-]{1,5}))?$/i';
  10.     if(preg_match($pattern,$email,$matches)){
  11.         return($data)?$matches:True;
  12.     }
  13. }

la hice hace un par de días por que la pedían mucho por acá !

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 06/01/2010, 08:48
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Problemas validar direccion de correo

Cita:
Iniciado por Hidek1 Ver Mensaje
Código PHP:
Ver original
  1. /**
  2.  * Valid email entered or return your information separately
  3.  *
  4.  * @param   $email string
  5.  * @param   $data boolean[optional]
  6.  * @return  boolean or array information
  7.  */
  8. function valida_email($email,$data=false){
  9.     $pattern = '/^([\w\d\.-]{1,50})@{1}([\w\d-]{1,50})\.{1}([\w\d-]{1,5})(?:\.{1}([\w\d-]{1,5}))?$/i';
  10.     if(preg_match($pattern,$email,$matches)){
  11.         return($data)?$matches:True;
  12.     }
  13. }

la hice hace un par de días por que la pedían mucho por acá !

saludos
Buenas,

Puedes indicarme para qué sirve el $data y como interpretar el return
return($data)?$matches:True;

Muchas gracias!
  #8 (permalink)  
Antiguo 06/01/2010, 08:52
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Problemas validar direccion de correo

es por si quieres obtener los datos solamente

ejemplo

Código PHP:
Ver original
  1. valida_email("[email protected]"); // eso te devolverá true, o false en caso de que estuviera mal escrito.
  2. valida_email("[email protected]",true); // eso te devolverá un array con los datos del mail, pruebalo
  3.  
  4. $test = valida_email("[email protected]",true);
  5. print_r($test);

saludos!
__________________
More about me...
~ @rhyudek1
~ Github
  #9 (permalink)  
Antiguo 06/01/2010, 13:42
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Problemas validar direccion de correo

Cita:
Iniciado por Hidek1 Ver Mensaje
es por si quieres obtener los datos solamente

ejemplo

Código PHP:
Ver original
  1. valida_email("[email protected]"); // eso te devolverá true, o false en caso de que estuviera mal escrito.
  2. valida_email("[email protected]",true); // eso te devolverá un array con los datos del mail, pruebalo
  3.  
  4. $test = valida_email("[email protected]",true);
  5. print_r($test);

saludos!
Gracias Hidek1,

¿Sabes que diferencia hay entre la que has puesto y esta propia de php?


Código PHP:
Ver original
  1. function valida_email($email){
  2.     return filter_var($email, FILTER_VALIDATE_EMAIL);
  3. }

Esta dirección
[email protected]-3m.a.-a

La de por mala tu expresión regular y por buena el código de este post

Me pregunto si puede existir una direccion así?!

PD: Alguien tiene un juego de pruebas suficientemente robusto para testear este tipo de funciones? creo que sería realmente útil!

Gracias de antemano
  #10 (permalink)  
Antiguo 06/01/2010, 13:49
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
fijate en el coloreado del mail que pusiste...
no termino el mail completo.. eso te indica que no puedes hacerte una asi.. pq en el final del dominio ( luego del punto ) no puedes poner guiones..
y lo otro

nunca había escuchado de filter_var así que no sabría darte la diferencia

saludos!

acabo de probar y
Código PHP:
Ver original
  1. echo filter_var('[email protected]', FILTER_VALIDATE_EMAIL)?"yes":"no";

me da como mail valido... mmm en realidad la funcion debe hacer su cometido pero me quedo con la mia xD! saludos!
__________________
More about me...
~ @rhyudek1
~ Github

Última edición por GatorV; 06/01/2010 a las 16:28

Etiquetas: correo, direccion
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 08:29.