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 original
pattern = 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 original
alert("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;