Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/01/2010, 16:16
Avatar de neodani
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