Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





validar porcentaje con javascript

Iniciado por ZüNdFoLGe, 06 de Febrero de 2008, 02:01:33 PM

« anterior - próximo »

ZüNdFoLGe

Como podria hacer para validar un porcentaje (de 0 a 100 con 2 cifras decimales) con javascript?

es decir, que no me deje escribir 101 ni 100.01 por ejemplo...
y que si me deje escribir 100.00 o 98.45 por ejemplo...

alguna idea?
Estaba pensando en validar todo desde el Bean, pero si es posible con javascript me ahorro algunas lineas de codigo...

Zaelsius

1) Valida los datos siempre en el servidor de nuevo (a no ser que sea para una práctica chorra de igual la seguridad)

2) Puedes usar las expresiones regulares de javascript

jalbam

Hola, buenas.

Primero recoges en una variable el valor de lo que han escrito en el campo de texto, y le haces un parseFloat() para pasarlo a real. Puede ayudarte utilizar !isNaN() (antes del parseFloat(), si no siempre te dira que es numerico).

Luego, comprueba que el numero resultante es mayor o igual que 0 y menor o igual que 100.

El problema es que la gente podrá escribir más de dos cifras decimales. Esto se soluciona restando la parte entera al numero que te han pasado y luego multiplicandolo por 10 elevado al numero de cifras que deseas (en este caso, 2). Luego con un modulo (resto) averiguas que parte decimal queda (tambien se puede hacer con substring() e indexOf()). Si es mayor a cero o mejor dicho, si queda algo, es que hay mas de dos cifras decimales.

Aunque para lo de más de dos cifras decimales si prefieres no "complicarte", admite las que sean y luego aplica un redondeo. Los redondeos se hacen multiplicando por 10 elevado al numero de decimales deseados (2 en tu caso), truncando los decimales y luego dividiendolo entre ese mismo 10 elevado a lo mismo. Eso me imagino que ya lo sabes.

Siento no explicarme mejor pero creo que es sencillo. Es que tengo un poco de prisa :)

Espero haberte solucionado algo.

Hasta pronto ;)

EDITO: tal como te dicen, no olvides de validar de lado del servidor. Si no, es posible saltarse la restricción solamente si el navegador no tiene activado el JavaScript. Lo del JavaScript debe ser sólo una medida de comodidad para el usuario y quizá para ti.
-----
Juan Alba Maldonado

sés

Así a bote pronto se me ocurre comprobar que que la longitud del string sea 6 y el resultado del parseFloat() esté entre 0 y 100.

Ni me he parado a pensarlo...

:shock: ¿Cuela?
Soy indeciso... ¿o no?

ZüNdFoLGe

Cita de: "sés"Ni me he parado a pensarlo...

Se nota  :lol:  ...

lo que queria hacer es restringir la entrada solo a valores entre 0 y 100 inclusive, con hasta 2 posiciones decimales... es decir:
100.4  OK
99.34 OK
101 NO, el script no me dejaria digitar el ultimo 1 ya que esta por fuera del rango...o sea que la entrada seria 10 y solo podria digitar o un "." o el 0...

uso blockNonNumbers para que solo pueda ingresar numeros y el punto (.)...

eso es lo q queria hacer...

Pero al final termine validando desde el servidor y desplegando errores al submitear...

grax x las respuestas!

Tei

Cita de: "ZüNdFoLGe"
lo que queria hacer es restringir la entrada solo a valores entre 0 y 100 inclusive, con hasta 2 posiciones decimales... es decir:
100.4  OK
99.34 OK
101 NO, el script no me dejaria digitar el ultimo 1 ya que esta por fuera del rango...o sea que la entrada seria 10 y solo podria digitar o un "." o el 0...


Algo como esto funciona*:

<input type="text" onchange="OOk=parseFloat;ooK=parseInt;Ook=100;ook=0;oOk=  ooK(OOk(this.value)*Ook)/Ook;oOk=(oOk>Ook)?Ook:((oOk<ook)?ook:oOk);this.value=oOk">


pero es insuficiente, porque no recoge los NaN, que seran muy normales.
es mejor escribir una funcion aparte, y llamarla si en 200 segundos no se pulsa una tecla. Esta funcion se la puede refinar para que de usabilidad, y tomar decisiones. Por ejemplo, si te teclean "dd" ¿que haces?. Igual te interesa detectar cada tecleo, y rechazar las letras, solo permitir numeros y el ".". O si te curras un poco mas, que acepte los "," y haces la conversion necesaria para dejar feliz a parseFloat.

lo que tu quieres hacer es facil para cualquier programador que sepa JS.

*Version sin ofuscar
<input type="text" onchange="v=  parseInt(parseFloat(this.value)*100)/100; v=(v>100)?100:v;v=(v<0)?0:v;this.value=v">






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.