Foros del Web » Programando para Internet » PHP »

Validar email en PHP

Estas en el tema de Validar email en PHP en el foro de PHP en Foros del Web. Alguien puede indicarme la funcion para validar un email en PHP etriana.com...

  #1 (permalink)  
Antiguo 15/08/2002, 15:52
 
Fecha de Ingreso: julio-2002
Mensajes: 7
Antigüedad: 19 años, 6 meses
Puntos: 0
Validar email en PHP

Alguien puede indicarme la funcion para validar un email en PHP

etriana.com
  #2 (permalink)  
Antiguo 15/08/2002, 18:15
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 889
Antigüedad: 20 años
Puntos: 4
Re: Validar email en PHP

Una forma sencilla sería comprobar si el campo de email está vació con if:

if ($email == ""){
echo "El campo email está vació";}
else{
//Aquí lo que quieras hacer si el campo de email no está vacío
}

Espero que al menos te sirva de algo jeje.
Saludos!

<html><center><embed src="http://www.iespana.es/redmaestro/banner.swf" height=75 width=500>
</embed></center></html>
  #3 (permalink)  
Antiguo 15/08/2002, 20:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Re: Validar email en PHP

Otra mas completa de validacion de mail ...

if (!ereg(&quot;^([a-zA-Z0-9\._]+)\@([a-zA-Z0-9\.-]+)\.([a-zA-Z]{2,4})$&quot;,$email)){
echo &quot;El e-mail no es valido&quot;;
} else {
// tu veras que haces si es valido ..
}

Se usa una expresion regular para validar el [email protected] .. atendiendo a varios factores .. de igual forma valida si hay algo o no ..

Un saludo,

pd: Chivi jeje ponte las pilas con las expresiones regulares :P
  #4 (permalink)  
Antiguo 15/08/2002, 20:24
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 889
Antigüedad: 20 años
Puntos: 4
Re: Validar email en PHP

es q.. no sabia donde tenia ese ejemplo!!! Busque hasta debajo de la moqueta y nada!! y por no dejarla a secas mientras buscaba, pues un apañito le hice jejeje.

PD: Utiliza la opción del maestro Cluster jeje. Algun día seré yo el sucesor .
  #5 (permalink)  
Antiguo 16/08/2002, 02:42
Avatar de Ferdy
Colaborador
 
Fecha de Ingreso: junio-2001
Ubicación: España
Mensajes: 1.430
Antigüedad: 20 años, 7 meses
Puntos: 0
Re: Validar email en PHP

Yo le pondría algo más restrictiva la Reg_Exp de Cluster, algo así valdría:
Código:
$res = ereg(
  '^(a-z0-9_]|\\-|\\.)+'.
  '@'.
  '(([a-z0-9_]|\\-)+\\.)+'.
  '[a-z]{2,4}$',
  $email);
Es parecida pero NO es exactamente igual, en este caso no puede haber mayúsculas ya que no están permitidas en los nombres de dominio y tampoco en los usuarios. Se le añade la restricción de que tiene que empezar ( ^ ) y acabar ( $ ) dentro del patrón. Y se le añade el caracter - en los nombres de dominio y en los usuarios.

Salu2.Ferdy



<hr />Usuario registrado de Linux #241564
<a href="http://www.ferdyx.org">FerdyX.org</a> - Web Open Source
  #6 (permalink)  
Antiguo 16/08/2002, 10:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Re: Validar email en PHP

Gracias Ferdy jeje tomo nota.

Como todo .. estos patrones para validar un e-mail .. deberiamos de mirar su correspondiente norma en la RFC no se cuantos .. cosa que yo no hice jeje :cantar:

Un saludo,xDD
  #7 (permalink)  
Antiguo 16/08/2002, 12:08
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 20 años, 2 meses
Puntos: 69
Re: Validar email en PHP

jajajaja
Genial!
comenzamos la guerra de las Expresiones Regulares. Seguro que de todo esto saldrá algo más que interesante)

Primero, quiero comentarles que la Expresion de Ferdy, tiene un error de sintaxis, que se le debe haber escapado mientras tipeaba. Correctamente sería:

Código:
 $res = ereg(
'^(a-z0-9_]|\\-|\\.)+'.
'@'.
'(([a-z0-9_]|\\-)+\\.)+'.
'[a-z]{2,4}$',
$email);
Pero que ocurre? esta expresion regular ( como la de nuestro amigo Cluster) tiene unas pequeñas fallas, a saber:
1) no impode que una direccion de email comience con un numero, cosa que en muchisimos servidores de email no se permite.
2) no impide que la direccion comience con caracteres no válidos, como _, - o .
3) no impide que antes de la @ no pueda haber un punto
4) No evita el uso del caracter &quot;_&quot; en el dominio.

Entonces, aquí va MI version de la expresion regular validadora de emails (E.R.V.E) :

$res = ereg(
'^[a-z]+([\.]?[a-z0-9_-]+)*@'.// usuario
'[a-z]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$', // server.
$email);

Ahora tan solo necesitamos a alguien que venga y nos diga : &quot;Yo tengo una version mejor&quot; y así seguimos con &quot;la pelea&quot;.
:P


<hr><font size=2 face=verdana>- Pablo Rigazzi (<img src=http://www.fantabuloso.com/iB_html/non-cgi/emoticons/bullwhip.gif align=absmiddle>)[/CODE]
<font size=1 color=#333333>Visita <a href=http://www.web-studio.com.ar>Web Studio</a>[/CODE]
  #8 (permalink)  
Antiguo 16/08/2002, 12:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Re: Validar email en PHP

jajajaa está buena la pelea por &quot;refinar&quot; mas el codigo ..

Yo tomo nota de lo q valla saliendo jeje pues soy &quot;primerizo&quot; con las expresiones regulares xDDD

Un saludo,
  #9 (permalink)  
Antiguo 16/08/2002, 12:23
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 20 años, 2 meses
Puntos: 69
Re: Validar email en PHP

Fe de Erratas :

Dónde dice
Cita:
Código:
 
$res = ereg(
'^(a-z0-9_]|\\-|\\.)+'.
'@'.
'(([a-z0-9_]|\\-)+\\.)+'.
'[a-z]{2,4}$',
$email);
Debería decir :
Código:
 $res = ereg(
'^[a-z0-9_]|\\-|\\.)+'.
'@'.
'(([a-z0-9_]|\\-)+\\.)+'.
'[a-z]{2,4}$',
$email);
Y ya va la primera &quot;actualizacion&quot;... acabo de recordar de que un dominio SI puede comenzar con un número, cosa que un usuario NO. Es por eso que hay que modificar la expresión para que quede asi:

$res = ereg(
'^[a-z]+([\.]?[a-z0-9_-]+)*@'.// usuario
'[a-z0-9]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$', // server.
$email);

Saludos.

<hr><font size=2 face=verdana>- Pablo Rigazzi (<img src=http://www.fantabuloso.com/iB_html/non-cgi/emoticons/bullwhip.gif align=absmiddle>)[/CODE]
<font size=1 color=#333333>Visita <a href=http://www.web-studio.com.ar>Web Studio</a>[/CODE]
  #10 (permalink)  
Antiguo 17/08/2002, 13:49
 
Fecha de Ingreso: noviembre-2001
Ubicación: Ramos Mejía - Buenos Aires
Mensajes: 45
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Validar email en PHP

Me parece que hay un error...
hay emails que comienzan con nº, por ejemplo, yo tengo el mail de mi pager, y el de mi celular, y ambos comienzan con nº.

Un saludo

Porque lo importante no es qué hagamos,<font color=#ff0000> sino cómo lo hagamos...[/CODE]
Scorpius
  #11 (permalink)  
Antiguo 17/08/2002, 21:52
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 20 años, 2 meses
Puntos: 69
Re: Validar email en PHP

No hay problema, entonce si quieren validar direcciones de email que comiencen con numero el nombre de usuario, la regex es asi :

$res = ereg(
'^[a-z0-9]+([\.]?[a-z0-9_-]+)*@'.// usuario
'[a-z0-9]+([\.-]+[a-z0-9]+)*\.[a-z]{2,}$', // server.
$email);

<hr><font size=2 face=verdana>- Pablo Rigazzi (<img src=http://www.fantabuloso.com/iB_html/non-cgi/emoticons/bullwhip.gif align=absmiddle>)[/CODE]
<font size=1 color=#333333>Visita <a href=http://www.web-studio.com.ar>Web Studio</a>[/CODE]
  #12 (permalink)  
Antiguo 27/03/2003, 15:49
Avatar de Rriveros  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 214
Antigüedad: 19 años, 2 meses
Puntos: 0
Se puede validar un campo de Email en HTML??
__________________
www.nelhost.net
  #13 (permalink)  
Antiguo 27/03/2003, 16:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Rriveros .. en tal caso sería en javascript .. Pregunta en el foro adecuado ... igualmente puedes emplear expresiones regulares en javascript.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 02/07/2003, 19:24
Avatar de Sav1989  
Fecha de Ingreso: junio-2003
Ubicación: Cap Fed | Colegiales
Mensajes: 50
Antigüedad: 18 años, 6 meses
Puntos: 0
Muchachos, ta todo bien con esto, por favor, alguien que me xplique la funcion ereg(), la lei en php.net y no entendi nada.. o sea, veo que erifica X cantidad de caracteres y nros... pero .. no logro entender la sintaxis... Ayuden please, que no soy capo en esto. en lo posible onda asi:
Cita:
Y si pones [email protected]#[email protected]# sale esto, a su vez, lo podes ampliar y hacer [email protected]$#)#UU##JJ#$} y saldra x cosa mas...

Muchas gracias al interesado en gastar unos mins y explicarme eso :)
  #15 (permalink)  
Antiguo 02/07/2003, 21:15
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 20 años
Puntos: 5
Mi buen amigo y groso administrador Webstudio...

Temo decirte que las mayusculas si estan permitidas en los correos electronicos, y MUCHA gente así los escribe.

[email protected]
__________________
Manoloweb
  #16 (permalink)  
Antiguo 02/07/2003, 21:18
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 19 años, 5 meses
Puntos: 8
ereg() es una funcion que utiliza un patron de expresiones regulares. Estas expresiones regulares, no son propias de PHP, si no que estan establecidas enteriormente.
El patron, es una cadena que contiene algo asi como comodines, que permiten saber si la cadena de entrada coincide con este.

PHP soporta 2 tipos de ER
Las PCRE (que son de perl)
http://www.php.net/pcre
Y las POSIX (donde se incluye ereg())
http://www.php.net/regex

Aqui hay un manual:
http://www.ignside.net/man/php/regex.php

Saludos!
  #17 (permalink)  
Antiguo 03/07/2003, 13:05
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 20 años, 2 meses
Puntos: 69
Cita:
Mensaje Original por Manoloweb
Mi buen amigo y groso administrador Webstudio...

Temo decirte que las mayusculas si estan permitidas en los correos electronicos, y MUCHA gente así los escribe.

[email protected]
ManoloWeb, no se en que parte leiste que yo indiqué que no se puedan poner maýusculas, ya que en ningún momento puse eso. Yo mismo tengo direcciones de email con mayúsculas adrede.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #18 (permalink)  
Antiguo 05/07/2003, 10:35
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 20 años
Puntos: 5
Re: Re: Validar email en PHP

Cita:
Mensaje Original por Ferdy
Yo le pondría algo más restrictiva la Reg_Exp de Cluster, algo así valdría:
Código:
$res = ereg(
  '^(a-z0-9_]|\\-|\\.)+'.
  '@'.
  '(([a-z0-9_]|\\-)+\\.)+'.
  '[a-z]{2,4}$',
  $email);
Es parecida pero NO es exactamente igual, en este caso no puede haber mayúsculas ya que no están permitidas en los nombres de dominio y tampoco en los usuarios . Se le añade la restricción de que tiene que empezar ( ^ ) y acabar ( $ ) dentro del patrón. Y se le añade el caracter - en los nombres de dominio y en los usuarios.

Salu2.Ferdy


Je je... me equivoque de Administrador... fue Ferdy

Saludos a los dos...
__________________
Manoloweb
  #19 (permalink)  
Antiguo 06/07/2003, 02:38
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 18 años, 8 meses
Puntos: 2
Código PHP:
if(!ereg('^[-!#$%&\'*
+\\./0-9=?A-Z^_`a-z{|}~]
+'
.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]
+\.'
.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'$email)){
//Invalido
} else{
//valido

Que opinan?
  #20 (permalink)  
Antiguo 28/05/2004, 21:57
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 18 años, 5 meses
Puntos: 105
Validar La Semantica No La Sintactica

Holas, , se que existen muchisimas formas de Validar un correo electronico, a esto no s referimos con la sintaxis, pero no nos preguntamos sobre la semantica del correo, , es decir, si el correo realmente existe o no, para que lo utilizemos en nuestras data. . si coloco un email que diga: [email protected] el sistema lo aceptaria y lo guardaria absurdamente, a eso me refiero, .

Pues deacuerdo a la cantidad de servidores que existe: yahho.com yahoo.es, hotmail.com, terra.com, mixmail.com, ......, seria que tengo q colorcar toda una lista de correo para verificar?, .

Si alguien tiene alguna sugerencia o solucion es bienvenido.

Gracias, .
__________________
.: Gildus :.
  #21 (permalink)  
Antiguo 30/05/2004, 03:25
Avatar de Ferdy
Colaborador
 
Fecha de Ingreso: junio-2001
Ubicación: España
Mensajes: 1.430
Antigüedad: 20 años, 7 meses
Puntos: 0
Ok... puedes hacerlo de la siguiente forma:

1) Adivinas el registro MX de lo que hay detrás de la @
2) Conectar al servidor MX
3) Mandarle los comandos EHLO/HELO, MAIL FROM y RCPT TO
4) Depende de lo que devuelva el RCPT TO sabes si existe o no:

a) Si devuelve 2XX es que la dirección existe
b) Si devuelve algo distinto puede que la direccion no exista

Así de simple.

PD: Manoloweb los estándares asi lo dicen y las cuentas de los sistemas (por lo menos en Unix) no pueden llevar mayusculas, asi que antes de pasarle la expresion regular lo deberías pasar todo a minúsculas.

Salu2.Ferdy
__________________
Born to be free
Por una sociedad del conocimiento libre
  #22 (permalink)  
Antiguo 01/06/2004, 09:11
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 18 años, 5 meses
Puntos: 105
Gracias Ferdy, pero porfavor dime, a lo que te refieres es mandar un mail? y luego ver si te responde o no el servidor con el mensaje 2XX ?

O conectarse de otra forma con sockets, ...?, por favor si tienes mas detalles, hazmelo saber.

Saludos
__________________
.: Gildus :.
  #23 (permalink)  
Antiguo 17/06/2004, 05:38
Avatar de Ferdy
Colaborador
 
Fecha de Ingreso: junio-2001
Ubicación: España
Mensajes: 1.430
Antigüedad: 20 años, 7 meses
Puntos: 0
Si, la idea es que te conectes con sockets al registro MX de lo que hay tras la @ en la dirección. Y vayas escribiendo esos comandos.

ftp://ftp.rfc-editor.org/in-notes/rfc2821.txt -> aquí tienes el RFC

Salu2.Ferdy
__________________
Born to be free
Por una sociedad del conocimiento libre
  #24 (permalink)  
Antiguo 17/06/2004, 14:26
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 18 años, 5 meses
Puntos: 105
Gracias Ferdy, .


Salu2, .
__________________
.: Gildus :.
  #25 (permalink)  
Antiguo 18/06/2004, 11:32
Avatar de rasmarko  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 78
Antigüedad: 19 años, 2 meses
Puntos: 1
eregi()

Saludos!

No para el problema de un email con mayúsculas y minúsculas es mejor utiizar la función eregi() que en vez de ereg()?????

Es mi opinión, claro muy humilde.
__________________
Fuentes - Diseweb - Frases Célebres
  #26 (permalink)  
Antiguo 12/07/2004, 21:20
 
Fecha de Ingreso: abril-2004
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 0
Y que hay de esta, es la publica por los señores de DesarrolloWeb.com

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)>1 && strlen($term_dom)<5 && (!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;
}
  #27 (permalink)  
Antiguo 13/07/2004, 06:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Cita:
Y que hay de esta, es la publica por los señores de DesarrolloWeb.com
Si bien podría funcionar .. no considera todos los casos además que es más optimo y hasta versatil usar expresiones regulares.

Fijate que usando expresiones regulares una validación de este estilo (complejo) de cierto patrón no lleva más de una o un par de líneas de código y .. fijate el montón de lógica que hay en el ejemplo que pusistes.

Un saludo,

Consejo: No todo lo que veas en "desarrolloweb.com" es la panacea. De hecho se quedó hace tiempo "atras" en esto de PHP al menos. Códigos viejos (sólo hay que ver el tutorial sobre sesiones) y ejemplos de ese estilo. Esto no es culpa de "desarrolloweb.com" (bueno .. si, tendrían que "filtrar" tal vez lo que publican con algo más de critério "técnico" al respecto) .. estos comentarios van exclusivamente para los autores respectivos de esos temas.
  #28 (permalink)  
Antiguo 14/07/2004, 03:51
Avatar de saopaore  
Fecha de Ingreso: marzo-2004
Ubicación: barcelona
Mensajes: 16
Antigüedad: 17 años, 10 meses
Puntos: 0
hola a todos ... se que soy de esos usuarios que tanto se suelen odiar en los foros que apenas escriben pero mis conocimientos de php son francamente nulos ... pero observando vuestros codigos ... hestoy aprendiendo mucho ... sobretodo de cluster ... pero ahora tengo una pequeña duda .. puede un email tener en caracter slash \ ?? cosa que me ha sorprendido mucho y otra cosa puede tener .. en la parte del user ??? ya que nunca lo he visto ... y si no puede tener .. en el user como seria la nueva expresion regular ?? y otra cosa mas (se que es abusar de vuestra paciencia) donde puedo obtener mas informacion de las expresiones regulares ?? gracias a todos !!!!
__________________
SAO
  #29 (permalink)  
Antiguo 14/07/2004, 06:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Cita:
puede un email tener en caracter slash \ ??
Por mi parte .. lo desconozco. Pero lo que si te puedo afirmar es que la "sintax" de un e-mail lo define un "standard" y debe complir las normas que definan en su "RFC" correspondiente y .. de hecho esas expresiones regulares o código (lógica) que puedas hacer -debería- respetarla para que "valide" todo los casos que cubre dicha descripción de la sintax oficial.

Por www.rfcfind.net podrías encontrar el RFC concreto que defina la sintax exacta de una dirección de e-mail.

Con esto pretendo llegar a que no todo es "PHP" o lo ha de resolver "PHP" sino que .. por ejemplo para esa "validación" de una cadena (que es en el fondo lo que va a tratar PHP) tiene sus própias normas que NO define PHP ..así que habrá que informarse por otro médio "quien" la define y de ahí (con eso en la mano) intentar implementarla bajo la lógica que se requiera. En este caso como hablamos de "cadenas" (strings) y de validación de estas .. para eso podemos recurrir a las expresiones regulares que se usan para eso mismo: validar/encontrar "patrones" en cadenas.

Un saludo,
  #30 (permalink)  
Antiguo 14/07/2004, 06:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 20 años
Puntos: 129
Lo dicho anteriormente sería para "validar la sintax" .. En este mensaje se ha hablado no sólo de validar la sintax (1er paso) sino también a su vez de validar la "existencia" al menos de esa cuenta de correo o por lo menos el "domino" si existe y podría asociar un servidor de correo (con sus registros MX o conectando directamente como en otros ejemplos que se han expuesto aquí).

Un saludo,
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.
Tema Cerrado

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 02:06.