Foros del Web » Programando para Internet » PHP »

Validar email(forma muy restrictiva).

Estas en el tema de Validar email(forma muy restrictiva). en el foro de PHP en Foros del Web. Hola! Veran, necesito una expresión regular para validar email. Ya sé que hay miles por internet, el problema viene en su permisidad. Lo que yo ...
  #1 (permalink)  
Antiguo 18/04/2013, 08:20
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Hola!

Veran, necesito una expresión regular para validar email. Ya sé que hay miles por internet, el problema viene en su permisidad. Lo que yo necesito es una expresion regular mucho menos permisiva. Lo ideal sería algo como lo que usa el componente fox contact de joomla!, pero aunque no lo tengais me vale cualquier expresión que sea restrictiva.

Señores, necesito su ayuda! xD. El tiempo se me empieza a echar encima y no puedo presentar una aplicación que valida los correos de manera mucho mas permisiva que a la que le estoy añadiendo la funcionalidad.

El que me de una solución es mi salvador. xD

Última edición por GatorV; 18/04/2013 a las 16:51
  #2 (permalink)  
Antiguo 18/04/2013, 09:51
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: Validar email(forma muy restrictiva).

Puedes utilizar filter_var como lo hace CodeIgniter

https://github.com/EllisLab/CodeIgni...validation.php

http://php.net/manual/es/function.filter-var.php

Saludos.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #3 (permalink)  
Antiguo 18/04/2013, 10:22
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Validar email(forma muy restrictiva).

Cita:
Iniciado por xalupeao Ver Mensaje
Puedes utilizar filter_var como lo hace CodeIgniter

[url]https://github.com/EllisLab/CodeIgniter/blob/develop/system/libraries/Form_validation.php[/url]

[url]http://php.net/manual/es/function.filter-var.php[/url]

Saludos.
Estoy probando el filter validate de esta manera:

if(filter_var($email, FILTER_VALIDATE_EMAIL)


y ni siquiera me acepta emails validos. Que hago mal??
  #4 (permalink)  
Antiguo 18/04/2013, 10:26
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Validar email(forma muy restrictiva).

¿Que tal una exprecion regular?
Código PHP:
Ver original
  1. <?php
  2.     $email = '[email protected]';
  3.     if (preg_match("([A-Za-z0-9]{3,8}+@[A-Za-z0-9]{3,8}+\.(com|org|net|edu)+)",$email)) {
  4.         $valido='si';          
  5.     } else {       
  6.         $valido='no';
  7.     }
  8.     echo($valido); 
  9. ?>

elijes que caracteres permites y cuales no, que rango de longitud tiene que tener el usuario y el dominio, y ademas que extencion puede tener el dominio, no creo que nesesitas nada mas sofisticado que eso. saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 18/04/2013, 10:30
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Validar email(forma muy restrictiva).

Cita:
Iniciado por NSD Ver Mensaje
¿Que tal una exprecion regular?
Código PHP:
Ver original
  1. <?php
  2.     $email = '[email protected]';
  3.     if (preg_match("([A-Za-z0-9]{3,8}+@[A-Za-z0-9]{3,8}+\.(com|org|net|edu)+)",$email)) {
  4.         $valido='si';          
  5.     } else {       
  6.         $valido='no';
  7.     }
  8.     echo($valido); 
  9. ?>

elijes que caracteres permites y cuales no, que rango de longitud tiene que tener el usuario y el dominio, y ademas que extencion puede tener el dominio, no creo que nesesitas nada mas sofisticado que eso. saludos.
Eso va cogiendo bastante forma. Gracias! El problema es que por las pruebas que he hecho, despues de la @ comprueba los dos primeros caracteres a ver si coinciden con algun dominio real(ho,gm,etc) y creo, no estoy seguro, que tambien comprueba que acabe en mail.
  #6 (permalink)  
Antiguo 18/04/2013, 10:36
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Validar email(forma muy restrictiva).

Cita:
Eso va cogiendo bastante forma. Gracias! El problema es que por las pruebas que he hecho, despues de la @ comprueba los dos primeros caracteres a ver si coinciden con algun dominio real(ho,gm,etc) y creo, no estoy seguro, que tambien comprueba que acabe en mail.
ahhh ¿?¿?¿? no entiendo, quieres restringir unicamente a usuarios de gmail o hotmail?

solo limita el parseo a esos dos (o los que vos quieras)

Código PHP:
Ver original
  1. preg_match("([A-Za-z0-9]{3,8}+@+(gmail|hotmail|yahoo)+\.(com|com.ar)+)",$email)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 18/04/2013, 10:37
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Respuesta: Validar email(forma muy restrictiva).

Solo que no elimines la posibilidad de que termine como .es, com.mx, .us... y esos dominios de países.

Tal vez haz una lista detallada de los country code permitidos.

(Editado. No ví el post de NSD. Coincidió en lo que yo escribía.)
  #8 (permalink)  
Antiguo 18/04/2013, 10:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Validar email(forma muy restrictiva).

hay un error en la exprecio, quedaria asi:
Código PHP:
Ver original
  1. preg_match("([A-Za-z0-9]{3,8}+@+(gmail|hotmail|yahoo)+\.(com|com.ar)$)",$email)

coinsido con rafael, si vas a ser tan restrictivo asegurate de habilitar todo lo que te interese y no dejar nada afuera,
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 18/04/2013, 10:55
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Validar email(forma muy restrictiva).

Cita:
Iniciado por NSD Ver Mensaje
hay un error en la exprecio, quedaria asi:
Código PHP:
Ver original
  1. preg_match("([A-Za-z0-9]{3,8}+@+(gmail|hotmail|yahoo)+\.(com|com.ar)$)",$email)

coinsido con rafael, si vas a ser tan restrictivo asegurate de habilitar todo lo que te interese y no dejar nada afuera,
No, si el restrictivo es el componente de joomla! ajaja. Yo solo trato de adaptarme a el. El caso es es que acepta muchisimos(cosas como latinmail y un monton mas que había probado y no recuerdo), pero si por ejemplo en vez de hotmail pones ho o hot, traga, incluso si añades dos caracteres mas cualquiera tambien traga, a partir del tercero ya no. Es muy extraño, no os parece?
  #10 (permalink)  
Antiguo 18/04/2013, 10:59
 
Fecha de Ingreso: octubre-2012
Mensajes: 39
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Validar email(forma muy restrictiva).

Cita:
Iniciado por pitunavia Ver Mensaje
No, si el restrictivo es el componente de joomla! ajaja. Yo solo trato de adaptarme a el. El caso es es que acepta muchisimos(cosas como latinmail y un monton mas que había probado y no recuerdo), pero si por ejemplo en vez de hotmail pones ho o hot, traga, incluso si añades dos caracteres mas cualquiera tambien traga, a partir del tercero ya no. Es muy extraño, no os parece?

Es más, estoy haciendo otras comprobaciones y, si por ejemplo usas @hotmail te traga ek .com y el .es, pero si usas latinmail solo te traga el com, por poner un ejemplo. Madre mia, menudo lio. Encima he intentado buscar dentro del codigo del componente la exp. regular, pero es un caos, yo hay no encuentro nada. jaaj.
  #11 (permalink)  
Antiguo 18/04/2013, 12:51
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Validar email(forma muy restrictiva).

ahh pero si usas joomja y la extencion es la que valida, para que quieres tu hacer una doble validacion?

por cierto la extencion desarma el mail y comprueba que exista el dns, eso es algo no recomendado (por mi al menos), ya que la velocidad de tu script depende de la velocidad de la comunicacion entre dos server, ademas suponte que un dia gmail se caiga (poco probable) ese dia, las cuentas de gmail no seran correos validos.

si quieres saber mas te dejo las funciones que usa la extencion para que las estudies por tu cuenta.

Código PHP:
Ver original
  1. function ValidateEmail()
  2.         {
  3.             // data aren't destinated to this form
  4.             //if (!count($_POST)) return true;
  5.             if (!isset($_POST[$this->GetId()])) return true;
  6.  
  7.             // email field is disabled
  8.             if (!isset($this->Fields['sender1'])) return true;
  9.  
  10.             // email field is empty and optional
  11.             if (empty($this->Fields['sender1']['Value']) && $this->Fields['sender1']['Display'] == 1) return true;
  12.  
  13.             if (!isset($this->Fields['sender1']['Value'])) return false;
  14.  
  15.             //jimport('joomla.mail.helper');
  16.             //(JMailHelper::isEmailAddress($email) == false)
  17.  
  18.             // Check the syntax
  19.             $this->Fields['sender1']['IsValid'] &= (bool)strlen(filter_var($this->Fields['sender1']['Value'], FILTER_VALIDATE_EMAIL));
  20.  
  21.             // Check mx record
  22.             $db = JFactory::getDBO();
  23.             $sql = "SELECT value FROM #__" . $GLOBALS["ext_name"] . "_settings WHERE name = 'dns';";
  24.             $db->setQuery($sql);
  25.             $method = $db->loadResult();
  26.             if ($method)
  27.             {
  28.                 $result = $this->$method();            
  29.             }
  30.         }
  31.  
  32.  
  33.         function dns_check()
  34.         {
  35.             // Check mx record
  36.             if (empty($this->Fields['sender1']['Value'])) return;
  37.  
  38.             $parts = explode("@", $this->Fields['sender1']['Value']);
  39.             $domain = array_pop($parts);
  40.             if (!empty($domain))
  41.                 $this->Fields['sender1']['IsValid'] &= checkdnsrr($domain, "MX");
  42.         }


como veras no solo revisa los dns sino que tiene una tabla en su base de datos con los correos que admite, es algo bastante complejo para la finalidad que tiene.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: Ninguno
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:20.