Algunas anotaciones acerca de validaciones con javascript y html.

1. acentos y Ñ en expresiones regulares.
Las expresiones regulares en javascript no pelan generalmente a los caracteres latinos, al parecer es un problema de codificación, no estoy seguro, pero cuando se me presento el problema estaba yo desplegando la página en UTF-8 y no deseaba cambiar de ninguna manera esa codificación por temor a descomponer todo lo que habia hecho antes, asi que encontre esta solución: agregar el código unicode respectivo dentro de nuestra expresion regular, veamos una lista con los unicoditos.

\u00e1 -> á
\u00e9 -> é
\u00ed -> í
\u00f3 -> ó
\u00fa -> ú

\u00c1 -> Á
\u00c9 -> É
\u00cd -> Í
\u00d3 -> Ó
\u00da -> Ú

\u00f1 -> ñ
\u00d1 -> Ñ

Cabe aclarar que se esta utilizando la libreria javascript livevalidation y que en una de sus funciones de validación se puede definir una expresion regular, ahora, supongamos essa expresion regular donde se permita meter una cadena de texto y que esta incluya las ñÑ:

/^[a-zA-Z\u00f1\u00d1]+$/

Sencillito y carismatico. Tambien cabe señalar que todo ese "kit" de trucos y herramientas fue probado solo en explorer 7 y firefox 3.

referencia:
http://www.webestilo.com/foros/mensaje.phtml?foro=11&msg=44094

2. solo permitir mayusculas en campos de texto:
Vamos por pasos.

uno. usaremos una funcion que contenga algo similar a esto:
formulario.texto.value=formulario.texto.value.toUpperCase()

tambien existe la funcion toLowerCase() para convertir a minusculas.

dos.
añadiendo la propiedad del style del campo de texto:
text-transform:uppercase;

esta propiedad solo hace las letras mayúsculas a la vista, pero al momento de enviar los datos te das cuenta que nunca las convirtió realmente a mayusculas, entonces no tiene sentido mas que visual.

tres.Una mezcla la funcion upperCase y de las expresiones regulares nos da una fumada como la de la siguiente página:

http://snipplr.com/view/1151/javascript-auto-uppercase/

La mia quedó asi:
o.value=o.value.toUpperCase().replace(/([^\sA-Z\u00d1])/g,"");
ya que deseo que no pasen numeros pero si los espacios (\s) y la Ñ(\u00d1).

cuatro. Creo que esta es la solución mas agradable al usuario. (Las otras hacen parpadear el campo y/0 se pierde el control del mismo)



<textarea id="r_1 name=" cols="50" rows="2" onkeypress="return keyP(event);"></textarea>


function keyP(e)
{
var codigo= GetKeyCode(e);
var caracter = String.fromCharCode(codigo);
var nopermitidos="'%\/\\";
// dos diagonales con atajos
if(nopermitidos.indexOf(caracter) != -1)
{
return false;
}
else
{
return true;
}
}


Lo importante es colocar el return dentro de la etiqueta del campo asi evita por si mismo la inserción de algun dato. Olvide donde encontre la solución, en fin una disculpa.

3. el eterno error de la función parseInt
Cuando intentamos pasar algun dato, sobre todo del tipo fecha, y convertirlo a entero nos encontramos con esta funcioncita que nos puede causar dolores de cabeza sino identificamos el problema el cual consiste en que si le enviamos un numero del 01 al 09 nos devolvera cero en lugar de un numero del 1 al 9. La solución es muy sencilla, solo hay que utilizar la función enviandole el tipo de conversión decimal:

parseInt('09');
devolvera 0

parseInt('09',10);
devolvera 9

2 comentarios:

Luis Fernando Numa Navarro Arias dijo...

Gracias por el aporte, en verdad me ayudo en lo referente a como añadir en las expresiones regulares la ñ Ñ, por si acaso lo probe en explorer 6 y funciona perfectamente.

omaru dijo...

En realidad era un detalle de transformacion de ISO8859-1 a UTF8
en python es facil resolverlo, solo tratar la cadena de caracteres como raw_string(cadena).encode('utf-8') y et voila