Buenas.
No es el primer tema que abro en el foro, pero espero que tenga más éxito que los otros, en los que no he recibido ninguna respuesta y sigo con dudas XD. Es posible que estuvieran mal de alguna manera, pero es raro ya que no hay respuestas ni siquiera para insultar jaja.
En fin, vamos a mi duda.
Estoy haciendo una validación de un formulario tanto con el atributo
pattern de HTML5 como con JS (y si ambos pasan haré la validación final en servidor).
El caso es que quiero que el JS tenga el menor número posible de variables con valores literales (escritos a mano en el mismo JS), para que me pueda servir para otros ficheros HTML con el menor número de modificaciones posibles.
Así pues, todas las variables que necesito recogen el valor del HTML de forma dinámica y si en algún momento cambio algo, no tendré que modificar el JS.
El problema está en que el atributo
pattern y las funciones para buscar expresiones regulares de JS no funcionan igual.
El campo que me da problemas es el de Nombre. Quiero que sólo se puedan introducir letras y espacios (ya tengo la validación por si sólo se ponen espacios en blanco).
Código HTML:
Ver original<input id="nombre" name="nombre" type="text" required="required" [B]pattern="[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+"[/B] title="Sólo se permiten letras" maxlength="50" />
Ya he comprobado que canta si se introduce cualquier otro valor.
Entonces lo recojo en JS así:
Código Javascript
:
Ver originalpattern = campo.getAttribute('pattern');
La peli viene en que no sé cómo hacer que cante si encuentra otro carácter, porque tanto .test() como .match() dan true si encuentran el patron en el valor, aunque tenga otros caracteres.
Es decir:
Código Javascript
:
Ver originalalert("Probamos con test()");
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test("asd")); // true
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test("asd asd")); // true
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test(" asd ")); // true
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test("asd12")); // true
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test("asd12asd")); // true
alert(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/.test("12")); // false
alert("/////////");
alert("Probamos con match()");
alert("asd".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // asd
alert("asd asd".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // asd asd
alert(" asd ".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // asd (probablemente también ponga los espacios, pero es difícil de decir ;)
alert("asd12".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // asd
alert("asd12asd".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // asd
alert("12".match(/[a-zA-zÑñáéíóúüÁÉÍÓÚÜ ]+/)); // null
Pues bien, a ver si hay suerte y alguien puede ayudarme.
Lo que necesito es una sola expresión regular que me sirva en ambas validaciones o un método de JS que encuentre coincidencias exactas entre la cadena y el patrón.
O también me sirve cualquier otra idea que se os ocurra.
Gracias de antemano.
Un saludo;