Ver Mensaje Individual
  #238 (permalink)  
Antiguo 10/07/2006, 04:08
MasLibertad
 
Fecha de Ingreso: julio-2006
Mensajes: 5
Antigüedad: 18 años, 4 meses
Puntos: 0
Comprobar dirección de Mail

P: ¿Cómo comprobar una dirección de mail?

R:

He visto varias funciones usadas para comprobar e-mail y quisiera participar en el foro con la función que yo uso para ello.

Este es mi primer mensaje, por lo que pido perdón de antemano si no soy capaz de mostrarlo correctamente.

Código:
function CompruebaMail(Campo)
{
   if (Campo.value == '') return false;
   Campo.value = Campo.value.toLowerCase();
   Campo.value = Campo.value.replace(/ /g, "");
   if (/\.\.|\.@|@\.|^\.|\.$/.test(Campo.value))
      return false;
   if (/\.([a-z]{2,3}|info|name|museum)$/.test(Campo.value))
      if (/^[_\.0-9a-z-]+@([0-9a-z-]+\.)+[a-z]*$/.test(Campo.value))
         return true;
   return false;
}
y ahora paso a explicar la función:
En primer lugar compruebo que el campo a verificar está vacío, en cuyo caso termina devolviendo FALSE
A continuación convierto el campo en minúsculas y le elimino todos los espacios.
Uso la función .test(), que sólo he visto documentada en MSDN y que permite comprobar máscaras de "Expresiones Regulares", es decir, comprobar si una cadena se ajusta a un formato determinado usando un lenguaje estándar que puede ser usado en numerosos lenguajes de programación. (JavaScript y PHP entre otros)
La sintaxis de la comprobación en javascript sería
Código:
if (/ExpresiónRegular/.test(VariableAComprobar))
y devolvería true si en la VariableAComprobar se encuentra un trozo que se ajuste al formato de la ExpresiónRegular.
En PHP se usaría
Código PHP:
if (ereg($ExpresionRegular$VariableAComprobar)) 
La primera ExpresionRegular es "\.\.|\.@|@\.|^\.|\.$" y comprueba si la VariableAComprobar contiene ".." ó ".@" ó "@." ó no contiene ningún "." ó hay un punto al final de la Variable. Si ocurre cualquiera de estas cosas, la dirección se considera incorrecta y retorna FALSE.
La segunda ExpresiónRegular es "\.([a-z]{2,3}|info|name|museum)$" y comprueba el final de la VariableAComprobar. Si encuentra un "." seguido de una cadena de sólo letras, de dos o tres caracteres (lo que incluye todas las terminaciones de países y terminaciones "com", "net", "etc"), ó "info" ó "name" ó "museum" SEGUIDOS del final de la cadena, se considera que el mail, provisionalmente sigue siendo válido y podemos hacer la última comprobación.
La tercera ExpresionRegular es "^[_\.0-9a-z-]+@([0-9a-z-]+\.)+[a-z]*$" y comprueba que desde el inicio de la cadena ("^") haya un tramo de caracteres que solo incluyan "_", ".", números, letras ó "-", seguido de "@" y uno o varios tramos de Letras, Numeros o "-" seguidos de un punto, y termine en una cadena de letras seguida de Fin de Cadena ("$"). En caso de que la máscara sea correcta, significará que la dirección de email es muy probable que sea válida.
Si quisiéramos hacer una comprobación completa tendríamos que hacer que la segunda condición incluyera TODAS las terminaciones de dominio ("es", "uk", "mx", "cl", "com", "net", y muchos etcéteras), con lo que lo que se ganaría en seguridad se perdería bastante en velocidad de proceso y claridad del programa, por lo que no lo recomiendo.

Es muy fácil incluir una rutina de Comprobación de Formularios
El botón Submit debe incluir la función "onClick()" de la siguiente forma

Código:
<input type=submit value=Aceptar name=Boton onClick="return CompruebaForm();"/>
y en nuestro script de JavaScript añadir las funciones CompruebaMail (ya escrita) y
Código:
function CompruebaForm()
{  
   if (document.Form1.Mail.value == '')
   {
      alert('Debe rellenar el campo e-Mail');
      document.Form1.Mail.focus();
      return false;
   }
   if (!CompruebaMail(document.Form1.Mail))
   {
      alert('La dirección de e-mail no es válida');
      document.Form1.Mail.focus();
      return false;
   }
   return true;
}
Con todo ello, podemos incluir la solicitud de e-mail en cualquier formulario y nos aseguramos, primero de que se rellene el campo de Mail, y segundo, que el mail introducido es correcto.

Para terminar, hay forofos de la programación que intentan hacer en una sola expresión regular TODAS las comprobaciones. Se puede hacer, pero la expresión regular es tan larga y compleja que, a mí personalmente, no me compensa, pero si alguien quiere intentarlo, adelante.

Espero que esto os sirva.

Última edición por MasLibertad; 11/07/2006 a las 03:39