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!!