Buenas.
En primer lugar, gracias a los dos, pero esto ya es algo personal.
Cita: En cuanto a la validación que comentas con el e-mail, ¿estás seguro? Acabo de hacer la prueba y no ocurre lo que dices.
La verdad es que ya no estoy seguro de nada, pero ya dije que las pruebas en validadores online me daban correctas, no así al ejecutar mi script. He hecho la siguiente prueba (es un fichero entero para que sólo haya que copiar en un documento html y ejecutarlo):
Código HTML:
Ver original<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript"> window.onload = function() {
var campoNombre = document.getElementById('nombre');
var campoEmail = document.getElementById('email');
var boton = document.getElementById('boton_enviar');
var regNombre = new RegExp("[a-zA-zÑñáéíóúüÁÉÍÓÚÜ\s]+", "gi");
var regEmail = new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){0,}(\.[a-z]{2,4})$", "gi");
boton.onclick = function() {
if(/*validarFormato(campoNombre, regNombre)
&&*/ validarFormato(campoEmail, regEmail)) {
document.getElementById('form').submit();
}
}
}
function validarFormato(campo, reg) {
console.log("PRIMERO: " + reg + " .test() " + campo.value + " = " + reg.test(campo.value));
var cadena = "aaaa@aaaa";
alert(reg.test(cadena));
alert(reg.test(cadena));
alert(reg.test(cadena));
alert(reg.test(cadena));
if(reg.test(campo.value)) {
console.log("SEGUNDO: solo debería entrar si es true: " + reg + " .test() " + campo.value + " = " + reg.test(campo.value));
console.log("true: " + campo.id);
document.getElementById('err_' + campo.id + '_valid').style.display = 'none';
return true;
} else {
console.log("TERCERO: solo debería entrar si es false: " + reg + " .test() " + campo.value + " = " + reg.test(campo.value));
console.log("false: " + campo.id);
document.getElementById('err_' + campo.id + '_valid').style.display = 'block';
return false;
}
}
.label_error {
color: #f00;
display: none;
}
<form id="form" method="post" action="#"> <input id="nombre" name="nombre" type="text" required="required" pattern="[a-zA-zÑñáéíóúüÁÉÍÓÚÜ\s]+" title="Sólo se permiten letras" maxlength="50" data-patron="1" /><br /> <label id="err_nombre_valid" class="label_error">Este campo sólo admite letras
</label>
<input id="email" name="email" type="text" required="required" pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){0,}(\.[a-z]{2,4})$" title="Dirección de correo electrónico válida" data-patron="0" /><br /> <label id="err_email_valid" class="label_error">Introduce un email válido
</label>
<input id="boton_enviar" type="submit" title="Enviar" value="Enviar" />
Y resulta que cada vez que hace el
test(), si tiene que dar
true, los valores se alternan.
Es decir, que si el patrón debe dar
false, va a dar
false todo el rato, pero si debe dar
true, cada vez par que ejecute el
test() da
false.
Fíjate de todas formas en que
alert(reg.test("aaaa@aaaa")); da
true como primer resultado.
No entiendo nada.
A, y por cierto, ya me fijé en que me dabas un enlace, pero tampoco me sirvió. Gracias de todas formas.
Un saludo;