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