Foros del Web » Programando para Internet » Javascript »

Validar numero con decimales

Estas en el tema de Validar numero con decimales en el foro de Javascript en Foros del Web. Hola a todos, estoy trabajando con php y javascrip, necesito validar el campo peso y permitir que se cargue solo si cumple la condicion, eso ...
  #1 (permalink)  
Antiguo 31/05/2012, 18:46
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Validar numero con decimales

Hola a todos, estoy trabajando con php y javascrip, necesito validar el campo peso y permitir que se cargue solo si cumple la condicion, eso lo consigo con la siguiente función
<script>
function validar (n){
if (!/^([0-9])*$/.test($n))
{ alert("El valor " + $n + " no es un número");}
else if ($n > 50.00 )
alert ("Ingrese el peso en kg")
}
</script>
El tema es que también tengo que permitir que se ingresen decimales como peso ej.: 20.5 y no sé cómo hacer para validar cuando tengo decimales
Gracias por la ayuda de ante mano..
__________________
Majo
  #2 (permalink)  
Antiguo 31/05/2012, 19:39
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Validar numero con decimales

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5. <title>validar número, entero o float</title>
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. function validar(campo){
  9. var elcampo = document.getElementById(campo);  
  10. if((!validarNumero(elcampo.value))||(elcampo.value == "")){
  11. elcampo.value = "";
  12. elcampo.focus();
  13. document.getElementById('mensaje').innerHTML = 'Debe ingresar un número';
  14. }else{
  15. document.getElementById('mensaje').innerHTML = '';
  16.  
  17. // Aqui pones el resto de las condiciones usando comparadores u operadores aritméticos, ya que estás seguro de que trabajas con números
  18.  
  19. }
  20. }
  21.  
  22. function validarNumero(input){
  23. return (!isNaN(input)&&parseInt(input)==input)||(!isNaN(input)&&parseFloat(input)==input);
  24. }
  25. //]]>
  26. </head>
  27. <form action="#">
  28. <input type="text" id="precio" name="precio" value="" onkeyup="validar(this.id);" /><br /><br />
  29. <input type="submit" value="procesar" /><br /><br />
  30. </form>
  31. <div id="mensaje"></div>
  32. </body>
  33. </html>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 01/06/2012, 07:15
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

Gracias Gracias.. voy a probarlo..Saludos
__________________
Majo
  #4 (permalink)  
Antiguo 01/06/2012, 08:52
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

Me sirvió, ahora el tema es que cuando quiero poner la condición
if (elcampo.value =< 80 && elcampo.value >= 190 ){alert('aqui va el mensaje');}
no hace nada, en cambio si pongo solo
if (elcampo.value >190 ){alert('aqui va el mensaje');}
me tira el mensaje cuando corresponde
ya probé varias opciones y no logro la solución..Gracias
__________________
Majo
  #5 (permalink)  
Antiguo 01/06/2012, 11:41
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Validar numero con decimales

los comparadores son
<= menor o igual
>= mayor o igual

este, que es el que usaste:
=<
no existe
Po otro lado cual es la condición que querés?
aceptar valores que esten entre 80 y 190 (ejemplo, 80 85 120 170 189 190)
ó
valores que sean menores a 81 (80 para abajo) y mayores a 189 (190 para arriba)

Si corregimos lo que pusiste, agrupando las expresiones
if((elcampo.value <= 80) && (elcampo.value >= 190))
el usuario va a poder poner cualquier numero, porque nunca obviamente un número puede ser menor a 80 Y (&&) al mismo tiempo mayor a 190

En todo caso, usando OR (||) tendría más logica
if((elcampo.value <= 80) || (elcampo.value >= 190))

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 01/06/2012 a las 15:27
  #6 (permalink)  
Antiguo 01/06/2012, 14:54
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Validar numero con decimales

volviendo a tu primera consulta, esta expresión admite que sean números enteros o decimales
Cita:
/^(\d)+((\.)(\d){1,2})?$/
el resto es lo que te comenta emprear
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #7 (permalink)  
Antiguo 01/06/2012, 19:02
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

Mil gracias por la ayuda…
La condición es que el usuario puede ingresar números mayores a 80 pero menores a 190 ósea tengo q permitir solo ese rango sino mostrar el mensaje.
__________________
Majo
  #8 (permalink)  
Antiguo 01/06/2012, 21:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Validar numero con decimales

Siendo ese el caso, en conceto te quedaria así

Código Javascript:
Ver original
  1. if ((elcampo.value <= 80) || (elcampo.value >= 190 )){
  2. document.getElementById('mensaje').innerHTML = 'valor no permitido';
  3. }else{
  4. document.getElementById('mensaje').innerHTML = 'Valor correcto';
  5. }

De todas maneras, te repito lo que a muchos otros usuarios, todo este tipo de validaciones con javascript son bastante inseguras, a lo sumo tendrían que tener por objeto mejorar la usabilidad del usuario, lo importante es que valides del lado del servidor, ó matar 2 pájaros de un tiro haciendo el ennvio a php con Ajax.
Hay muchas formas de burlar tu método, una muy sencilla, el usuario no tipea nada, simplente copia de otro lado el número 7878 y lo pega en el campo, todo, con el solo uso del mouse, entonces ya necesitarías de una segunda validación, esta vez con el evento onsubmit...
bueno, es solo ua advertencia

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 02/06/2012, 08:02
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

Ahh...OK mil gracias por esta info y por la ayuda, lo tendre en cuenta... Saludos..
__________________
Majo
  #10 (permalink)  
Antiguo 03/06/2012, 15:38
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

Funciona perfecto, solo que use alert para mostrar los mensajes, ya que si lo dejaba con document.getElementById('mensaje').innerHTML al colocar la función en un formulario de varios campos como el que estoy manejando no me muestra nada. El tema es que si o si el usuario usa el tabulador para ir moviendo el cursor dentro del formulario y cuando llega al campo al que le aplico la función muestra el mensaje(alert) antes de escribir nada.
Tengo alguna manera de solucionar esto??
Gracias...
__________________
Majo
  #11 (permalink)  
Antiguo 03/06/2012, 16:01
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

También pasa que cuando apretó, por ejemplos, la tecla del n°8 ya me pone el alert de que no es un valor permitido y en realidad debería dejarme ingresar por ej. 81,82…
__________________
Majo
  #12 (permalink)  
Antiguo 03/06/2012, 17:03
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Validar numero con decimales

pensaba que simplemente validabas el formulario con submit, pero según los problemas que tienes no es así. básicamente lo que pretendes hacer es una mascara de entrada. para lo cual no creo que tengas conocimientos suficientes
te dejo una mascara de entrada para validar una fecha con el propósito de que desistas
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script type="text/javascript">
var patron = new Array(4,2,2)
function fnc(elem,separador,pat,numerico) {
if(elem.valoranterior != elem.value) {
valor = elem.value;
largo = valor.length;
valor = valor.split(separador);
valor2 = "";

for(i=0; i<valor.length; i++) {
valor2 += valor[i];
}

if(numerico){
for(j=0; j<valor2.length; j++){
if(isNaN(valor2.charAt(j))){
letra = new RegExp(valor2.charAt(j),"g");
valor2 = valor2.replace(letra,"");
}
}
}

valor = "";
valor3 = new Array();
for(n=0; n<pat.length; n++) {
valor3[n] = valor2.substring(0,pat[n]);
valor2 = valor2.substr(pat[n]);
}

for(q=0; q<valor3.length; q++) {
if(q == 0) {
valor = valor3[q];
}else{
if(valor3[q] != "") {
if (valor3[1] > 12 ) {
valor = valor3[0];
} else if (valor3[2] > 31) {
valor = valor3[0] + separador + valor3[1];
}else{
valor += separador + valor3[q];
}

}
}
}

elem.value = valor;
elem.valoranterior = valor;
}
}
</script>
</head>
<body>
<form>
<h1>Valida una fecha yyyy-mm-dd</h1>
<input type="text" name="fecha" id= "fecha" onkeyup="fnc(this,'-',patron,true)" maxlength="10" />
</form>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #13 (permalink)  
Antiguo 03/06/2012, 17:33
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Validar numero con decimales

Cita:
Iniciado por majo_83 Ver Mensaje
Funciona perfecto, solo que use alert para mostrar los mensajes, ya que si lo dejaba con document.getElementById('mensaje').innerHTML al colocar la función en un formulario de varios campos como el que estoy manejando no me muestra nada. El tema es que si o si el usuario usa el tabulador para ir moviendo el cursor dentro del formulario y cuando llega al campo al que le aplico la función muestra el mensaje(alert) antes de escribir nada.
Tengo alguna manera de solucionar esto??
Gracias...
Cita:
Iniciado por majo_83 Ver Mensaje
También pasa que cuando apretó, por ejemplos, la tecla del n°8 ya me pone el alert de que no es un valor permitido y en realidad debería dejarme ingresar por ej. 81,82…
Te tiene que funcionar de las dos maneras, mezclar onkeyup con alerts no te lo recomiendo. Con lo del tabulador, a lo hecho hay que sumar la deteccción de la tecla
probá esto

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  5. <title>validar número, entero o float</title>
  6. <script type="text/javascript">
  7. //<![CDATA[
  8. function validar(campo,e){
  9. var elcampo = document.getElementById(campo);  
  10. e = (e) ? e : ((event) ? event : null);
  11. var version = (e.target) ? e.target : ((e.srcElement)?e.srcElement : null );
  12. var teclaNum = e.keyCode;
  13. if(teclaNum != 9){
  14.    
  15. if((!validarNumero(elcampo.value))||(elcampo.value == "")){
  16. elcampo.value = "";
  17. elcampo.focus();
  18. document.getElementById('mensaje').innerHTML = 'Debe ingresar un número';
  19. }else{
  20. document.getElementById('mensaje').innerHTML = '';
  21.  
  22. // Aqui pones el resto de las condiciones usando comparadores u operadores aritméticos, ya que estás seguro de que trabajas con números
  23. if ((elcampo.value < 80) || (elcampo.value > 190)){
  24. document.getElementById('mensaje').innerHTML = 'valor no permitido';
  25. }else{
  26. document.getElementById('mensaje').innerHTML = '';
  27. }
  28.  
  29. } // fin valida num
  30. } // fin detectar tecla
  31. } // fin función
  32.  
  33. function validarNumero(input){
  34. return (!isNaN(input)&&parseInt(input)==input)||(!isNaN(input)&&parseFloat(input)==input);
  35. }
  36. //]]>
  37. </head>
  38. <form action="#">
  39. texto <input type="text" id="nombre" name="nombre" value="" /><br />
  40. número rango <input type="text" id="precio" name="precio" value="" onkeyup="validar(this.id,event);" /><br />
  41. número rango <input type="text" id="precio2" name="precio2" value="" onkeyup="validar(this.id,event);" /><br />
  42. <input type="submit" value="procesar" /><br /><br />
  43. </form>
  44. <div id="mensaje"></div>
  45. </body>
  46. </html>

funciona correctamente y hay tres campos (en 2 se valida en otro no) y te acepta números enteros como flotantes

Y por favor para otros posts, indicá concretamente cuantos campos hay, si deben validar todos o no etc, ya que esto resulta en respuestas completamente diferentes

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #14 (permalink)  
Antiguo 03/06/2012, 17:37
 
Fecha de Ingreso: abril-2012
Mensajes: 54
Antigüedad: 12 años
Puntos: 0
Respuesta: Validar numero con decimales

OK... Lo voy a tener en cuenta...Gracias por tu ayuda emprear.. Voy a probarlo...
__________________
Majo

Etiquetas: funcion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:07.