Foros del Web » Programando para Internet » Javascript »

Problema con validador de e-mail

Estas en el tema de Problema con validador de e-mail en el foro de Javascript en Foros del Web. Hola de nuevo!! Tengo un script para validar direcciones de e-mail que no recuerdo de dónde lo saqué, pero presenta un problema y a mi ...
  #1 (permalink)  
Antiguo 25/12/2006, 17:04
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años, 2 meses
Puntos: 154
Problema con validador de e-mail

Hola de nuevo!!

Tengo un script para validar direcciones de e-mail que no recuerdo de dónde lo saqué, pero presenta un problema y a mi me queda muuuy grande, por lo poco que se sobre js.

El problema es que una vez validada la dirección, sí se envía el form y no debería enviarse si no está correcta.

Aquí pongo el script:

Código HTML:
<!-- Comienzo del script
function emailCheck (emailStr) {
/* El patrón siguiente se utiliza para comprobar si la dirección de e-mail corresponde con el
   formato de usuario@dominio. También se utiliza para separar el usuario del dominio. */

var emailPat=/^(.+)@(.+)$/

/* La secuencia siguiente representa el patrón para comprobar todos los
   caracteres especiales. No deseamos permitir caracteres especiales en
   la dirección. Estos caracteres incluyen ( ) < > @ , ; : \ " . [ ]    */

var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

/* La secuencia siguiente representa la gama de los caracteres permitidos
   en un usuario o un nomre de dominio. Realmente indica qué caracteres no se
   permiten. */

var validChars="\[^\\s" + specialChars + "\]"

/* El patrón siguiente se aplica si el "usuario" es una cadena de caracteres 
   (en cuyo caso, no hay ninguna regla sobre qué caracteres 
   se permiten y cuales no, vale cualquier cosa).  E.g. "jiminy cricket"@disney.com
   es una dirección de e-mail válida. */

var quotedUser="(\"[^\"]*\")"

/* El patrón siguiente se aplica para los dominios que son direcciones IP,
   en lugar de los nombres simbólicos. E.g. joe@[123.124.233.4 ] es
   una dirección legal de e-mail. NOTA: Se requieren los corchetes. */

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

/* La secuencia siguiente representa un átomo (básicamente una serie de
   caracteres no-especiales.) */

var atom=validChars + '+'

/* La secuencia siguiente representa una palabra en el username típico.
   Por ejemplo, en [email protected], juan y perez son palabras.
   Básicamente, ambas palabras son una cadena. */

var word="(" + atom + "|" + quotedUser + ")"

// El patrón siguiente describe la estructura del usuario

var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

/* El patrón siguiente describe la estructura de un dominio simbólico
   normal, en comparación con el ipDomainPat, demostrado arriba. */

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")


/* Finalmente, comencemos a intentar comprobar si la dirección provista es válida. */

/* Comenzamos con el patrón simplemente a partir usuario@dominio en
   distintas partes para facilitar el análisis. */

var matchArray=emailStr.match(emailPat)

if (matchArray==null) {
  /* Demasiadas/pocas @ o algo; básicamente, esta dirección incluso no
     concuerda con el formato general de una dirección válida de e-mail. */
	alert("La entrada de e-mail parece ser incorrecta (chequee @ y .'s)")
	return false;
}
var user=matchArray[1]
var domain=matchArray[2]

// Comprueba si "user" es válido

if (user.match(userPat)==null) {
    // user is not valid
    alert("El nombre de usuario parace no ser correcto.")
    return false;
}

/* si la dirección de e-mail es una dirección IP (en comparación con un nombre de host 
   simbólico) se cerciora de que la dirección IP sea válida. */

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
    // this is an IP address
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Direccion IP no valida!")
		return false;
	    }
    }
    return true;
}

// El dominio es un nombre
var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("El nombre de dominio parace no ser correcto.")
    return false;
}

/* El dominio parece válido pero ahora hay que comprobar el final y asegurarse de que 
    termina en 3 letras (com, net, gov, edu...) o 2 letras si es un dominio de país 
    (es, us, uk...) y que hay un nombre de host precediento a la extensión. */

/* Ahora necesitamos partir el dominio a revisar en muchas partes consistente en:*/

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>3) {

   // La dirección de e-mail debe terminar en una palabra de 2 ó 3 letras.

   alert("La direccion de correo debe acabar en 3 letras de dominio o 2 de un pais.")
   return false;
}

// Nos aseguramos de que hay un nombre de host precediendo a la extensión del dominio.

if (len<2) {
   var errStr="Esta direccion es desconocida como IP!"
   alert(errStr)
   return false;
}

}

//  Fin del script --> 

Agradecería a cualquiera que me pueda echar una mano...

Un fuerte abrazo a todos y ¡¡FELIZ NAVIDAD!!
  #2 (permalink)  
Antiguo 25/12/2006, 20:13
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 18 años
Puntos: 8
Re: Problema con validador de e-mail

hola,
no sabría decirte si está bien el script, pero has puesto en la etiqueta form: onsubmit="return emailCheck (un_email)" ?
según lo que devuelva tu script lo enviará o no.

de todas formas te dejo un código que yo utilizaba y me iva bien:

Código:
<script type="text/javascript" language="javascript">
<!--
function validar_email(valor)
{
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor))
  {
    // alert de prueba:
    alert("La dirección de email " + valor + " es correcta.");
    return (true);
  }
  else
  {
    // alert de prueba, puede dejarse como error:
    alert("La dirección de email " + valor + " es incorrecta.");
    return (false);
  }	
-->
</script>
...
<form name="..." method="...." enctype="multipart/form-data" onsubmit="return validar_email(document.form_name.email.value)" action="...">
<input type="text" name="email" />
...
</form>
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 01:56.