Foros del Web » Programando para Internet » Javascript »

Validación de campos numéricos POSITIVOS y con 3 decimales...

Estas en el tema de Validación de campos numéricos POSITIVOS y con 3 decimales... en el foro de Javascript en Foros del Web. Muy buen día a todos... He estado buscando cómo validar un campo Input TEXT donde solo me valide números positivos y que acepte de 2 ...
  #1 (permalink)  
Antiguo 25/11/2009, 12:08
 
Fecha de Ingreso: junio-2008
Mensajes: 101
Antigüedad: 15 años, 10 meses
Puntos: 0
Validación de campos numéricos POSITIVOS y con 3 decimales...

Muy buen día a todos...

He estado buscando cómo validar un campo Input TEXT donde solo me valide números positivos y que acepte de 2 a 3 decimales.

Tengo 3 opciones.

1.- Donde tenga como máximo 9 cifras contenidas como número máximo y todos positivos. Esta parte ya la tengo.


<tr>
<td>Casilla 1 (Ganancias): </td>
<td><input type="text" name="numero1" size="8" id="Casilla_1" maxlength="9">
&nbsp;&nbsp;&nbsp;&nbsp;Solo numeros positivos.</td>
</tr>
<script type="text/javascript">numberblog(document.getElementById("Ca silla_1"))</script>
<script type="text/javascript">
function numberblog(e){
var f=function(){this.value=this.value.replace(/\D/,'')};
num.toFixed(3)
e.onkeyup=f
e.onkeydown=f
e.onkeypress=f
e.onmousedown=f
e.onmouseup=f
e.onclick=f
e.onchange=f
e.onblur=f
}
</script>

2.- :-p Donde tenga solo números positivos pero desde un rango de 0 a 100 y que acepte 2 decimales. Por ejemplo: 69.88
Este ejemplo todavía no lo tengo del todo...

<input type=text name="cosManVaReemAct_f" size="4" value="default" onChange="validaNum(this.value,0,100)">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>validaNum(this.va lue,0,100)"</b>

<script type="text/javascript">
function validaNum(n,mini,maxi)
{
n = parseInt(n)
if ( n<mini || n>maxi ) alert("El valor debe ser entre 0 - 100");
}
</script>
También tengo otro ejemplo con los decimales pero no logro meterlo aquí...
<script type="text/javascript">

var num=13.3714;
document.write(num.toFixed(1)+"<br />") // Permite un decimal
document.write(num.toFixed(3)+"<br />") // Permite dos decimales
document.write(num.toFixed(10)) // Permite diez decimales

</script>

Y que también haga lo mismo que el anterior que es el de no permitir meter caracteres de letras o signos mas que solo números en el Input text... Esta función la hace "function numberblog(e)" arriba mencionada...

3.- Algo parecido al anterior pero aquí yo establezco como límite de 0 al 999999.999

Saludos y espero me puedan ayudar los gurús de este sitio... he estado viendo que el éxito de este foro son las aportaciónes de personas como Caricatos...
Mil gracias mi buen gurú Caricatos por sacarnos del hoyo a los simples mortales...

Saludos a todos..... Y espero me puedan ayudar....
  #2 (permalink)  
Antiguo 25/11/2009, 22:02
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

no comprendo si es que tienes que hacer las tres opciones, o si es que tienes que decidirte por una pero ninguna las tienes funcionando. bien, mira el siguiente ejemplo con expresiones regulares.
Código:
<input onchange="
range = /^\d{1,2}(\.\d{1,3})?$/;
hundred = /^100$/;
if(!(range.test(this.value) || hundred.test(this.value)))alert('Introducio caracteres no numericos o la cifra no esta en el rango de 0 a 100');
" />
en el ejemplo solo se muestra un aviso, pero lo importante es la expresion regular.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 26/11/2009, 12:00
 
Fecha de Ingreso: junio-2008
Mensajes: 101
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

zerokilled

Antes que nada te agradezco mucho tu respuesta....

Lo que tengo que hacer es que dentro de un formulario yo tengo varios campos de INPUT en los que yo meto datos numéricos hacia una Base de Datos MySQL. Entonces tengo 3 tipos de opciones....

1.- Que es meter el número de Ganancia que se tuvo al mes.... El campo solo acepta números..... y con una cifra NO mayor a los 9 dígitos enteros y 3 decimales.... Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

2.- Meter porcentajes de las máquinas que están disponibles o las fallas que tuvieron.... los porcentajes van de 0 - 100 % y aquí se aceptan 2 decimales....
Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

3.- Meter números enteros de 0 - 99999. éste ya lo tengo.... ya que no implica decimales.... Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

En resumen lo que necesito es validar por JavaScript los campos y lo que me hace falta implementar son los decimales....

Por tu ayuda mil gracias....

P. D. Ya estoy estudiando el business de los Regulars Expresions.... Aunque lo que no entiendo es el porqué pones "?$/;" al final de las RegEx....
  #4 (permalink)  
Antiguo 26/11/2009, 12:51
 
Fecha de Ingreso: junio-2008
Mensajes: 101
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

Entonces tengo 3 tipos de opciones....

1.- Que es meter el número de Ganancia que se tuvo al mes.... El campo solo acepta números..... y con una cifra NO mayor a los 9 dígitos enteros y 3 decimales.... Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

Ejemplo:
<script type="text/javascript">
function numberblog(e){
var f=function(){this.value=this.value.replace(/\d{1,2}(\.\d{1,3})?$/,'')};
//var f=function(){this.value=this.value.replace(/\D/,'')};
num.toFixed(3)
e.onkeyup=f
e.onkeydown=f
e.onkeypress=f
e.onmousedown=f
e.onmouseup=f
e.onclick=f
e.onchange=f
e.onblur=f
}

function validaNum(n,mini,maxi)
{
n = parseInt(n)
if ( n<mini || n>maxi ) alert("El valor debe ser entre 0 - 100");
}

</script>

<TR>
<TD><input type="hidden" name="Det_2" value="<?php echo "27" ?>" id="Casilla_1">Costo de Producción por Unidad de Salida</TD>
<TD><INPUT type=text name="cosProduxUniSal_f" size="4" value="default">&nbsp;Pesos<b>/</b>Unidad Vol.</TD>
</TR>
<TR>
<script type="text/javascript">numberblog(document.getElementById("Ca silla_1"))</script>
</TR>


-------------------------------------------------------------------------------------------

2.- Meter porcentajes de las máquinas que están disponibles o las fallas que tuvieron.... los porcentajes van de 0 - 100 % y aquí se aceptan 2 decimales....
Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

<tr>
<td>Casilla 2 (Porcentajes): </td>
<td><input type="text" name="numero2" size="3" id="Casilla_2" maxlength="3" onChange="validaNum(this.value,0,100)">
&nbsp;&nbsp;&nbsp;&nbsp;Solo valores positivos entre 0 y 100.</td>
</tr>
<script type="text/javascript">numberblog(document.getElementById("Ca silla_2"))</script>

-----------------------------------------------------------------------------------------------

3.- Meter números enteros de 0 - 99999. éste ya lo tengo.... ya que no implica decimales.... Debe de aceptar una cadena vacía ya que yo lo he definido en mi base de datos como valores float default=-0.001; Por lo que aquí tengo que reemplazar la cadena vacía por la palabra "default".

<tr><td>Casilla 3 (Semanas): </td>
<td><input type="text" name="numero3" size="3" id="Casilla_3" maxlength="6">
&nbsp;&nbsp;&nbsp;&nbsp;Solo valores positivos y solo se permiten 6 cifras. Num. Max. = 999999</td></tr>
<script type="text/javascript">numberblog(document.getElementById("Ca silla_3"))</script>

--------------------------------------------------------------------------------------------------

En este último paso es cuando yo debo de hacer el script completo para la validación de cada campo antes de pasarle los valores al servidor PHP y que los introduzca en la Base de Datos MySQL....

<tr>
<td colspan="2" align="center"><input type="button" value="Enviar" onclick="valida_envia()"></td>
</tr>

Espero me haya podido explicar lo mejor posible.....

Por su atención, una vez mas MIL GRACIAS.....
  #5 (permalink)  
Antiguo 26/11/2009, 17:03
 
Fecha de Ingreso: junio-2008
Mensajes: 101
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

Como podría yo crear un campo INPUT text donde solo se pudiera meter números y con el patrón xx.xx y de rango 0 - 100...???? también me acepte una cadena vacía y me la cambie por "default"....

<script type="text/javascript">
function numberblog(e){
var f=function(){this.value=this.value.replace(/\D/,'')};
//num.toFixed(3)
e.onkeyup=f
e.onkeydown=f
e.onkeypress=f
e.onmousedown=f
e.onmouseup=f
e.onclick=f
e.onchange=f
e.onblur=f
}
</script>
<p>Para ver el archivo oginal dar click <B><a href="hvtvtvpv:/v/vwvwvwv.vwebdeveloper.com/forum/archive/index.php/t-85606.html">aqu&iacute;</a>orrige la liga quitando la V de la ligac</B><br>
<input type="text" value="default" id="v">
<script type="text/javascript">numberblog(document.getElementById("v" ))</script>
</p>

Cómo yo podría crear ese patrón en la función de REPLACE de JavaScript...???? Por cierto que la función JavaScript también me acepte una cadena vacía y me la cambie por "default"....



No me sale.... estoy estudiando dde esta buenísima página....
w3schools.com(/)jsref(/)jsref_obj_regexp.asp

Para quien quiera consultar esta página quitar los paréntesis....
  #6 (permalink)  
Antiguo 02/12/2009, 11:29
 
Fecha de Ingreso: junio-2008
Mensajes: 101
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

Estoy desarrollando bajo PHP y MySQL....

Tengo un proyecto donde tengo muchos formularios y esos formularios tienen aproximadamente de 20 a 25 campos Input TEXT. pero lo que requiero es que por medio de JavaScript donde solo acepte los números y que contenga límites del 1 al 100 y que se puedan permitir 2 o 3 decimales después del punto .

Lo que todavía no me sale en el archivo JavaScript es que me acepte una cadena vacía y me la cambie por "default" a la hora de oprimir SUBMIT....
Alguién sabe de esto al respecto??????

Tengo estos ejemplos....


Código Ejemplo 1.-:
Ver original
  1. <script type="text/javascript">
  2. function numberblog(e){
  3. var f=function(){this.value=this.value.replace(/\D/,'')};
  4. //num.toFixed(3)
  5. e.onkeyup=f
  6. e.onkeydown=f
  7. e.onkeypress=f
  8. e.onmousedown=f
  9. e.onmouseup=f
  10. e.onclick=f
  11. e.onchange=f
  12. e.onblur=f
  13. }
  14. </script>
  15. <p><input type="text" value="default" id="v">
  16. <script type="text/javascript">numberblog(document.getElementById("v" ))</script>
  17. </p>

En este ejemplo lo que hace es que cuando encuentra un caracter que no sea dígito lo reemplaza por (' ')

En este caso lo que me hace falta es que no me reemplace le PUNTO... pero no se cómo se hace en los Regular Expresions....

-------------------------------------------------------------------------------------------------------

Código Ejemplo 2.-:
Ver original
  1. <input maxlength="5" onchange="
  2. range = /^\d{1,2}(\.\d{1,3})?$/;
  3. hundred = /^100$/;
  4. if(!(range.test(this.value) || hundred.test(this.value)))alert('Introducio caracteres no numericos o la cifra no esta en el rango de 0 a 100');
  5. " />

En este ejemplo permite muchos puntos........

Cómo le puedo hacer aquí para que me acepte solo un punto decimal y 2 dígitos después del decimal...???

-------------------------------------------------------------------------------------------------------

Código Ejemplo 3.-:
Ver original
  1. <script type="text/javascript">
  2.  
  3. function fieldNumber (objeto)
  4. {
  5. var valorCampo;
  6. var evento_key = window.event.keyCode;
  7. var numPosPunto = 0;
  8. var strParteEntera = "";
  9. var strParteDecimal = "";
  10. var NUM_DECIMALES = 2;
  11. switch (evento_key)
  12. {
  13. case 48:
  14. case 49:
  15. case 50:
  16. case 51:
  17. case 52:
  18. case 53:
  19. case 54:
  20. case 55:
  21. case 56:
  22. case 57:
  23. case 46:
  24. break;
  25. default:
  26. window.event.keyCode = 0;
  27. return false;
  28. }
  29. valorCampo = objeto.value;
  30. if (evento_key == 46)
  31. if (valorCampo.indexOf(".") != -1)
  32. {
  33. window.event.keyCode = 0;
  34. return false;
  35. }
  36. /* Sólo puede teclear el número de decimales indicado en NUM_DECIMALES */
  37. if ((numPosPunto = valorCampo.indexOf(".")) != -1)
  38. {
  39. strParteEntera = valorCampo.substr(0,(numPosPunto - 1));
  40. strParteDecimal = valorCampo.substr((numPosPunto + 1), valorCampo.length)
  41. if (strParteDecimal.length > (NUM_DECIMALES - 1))
  42. {
  43. window.event.keyCode = 0;
  44. return false;
  45. }
  46. }
  47. return true;
  48. }
  49.  
  50. function validaNum(n,mini,maxi)
  51. {
  52. n = parseInt(n)
  53. if ( n<mini || n>maxi ) alert("El valor debe ser entre 0 - 100");
  54. }
  55. </script>
  56.  
  57. <INPUT type=text name="trabPlanea_Tota_d" onChange="validaNum(this.value,0,100)" size="4" onkeypress="fieldNumber(this)" value="default" maxlength="5">


Este es el ejemplo que mejor me sirvió.... wow.....

El único y GRAN DEFECTO es que NO sirve para MOZILLA. No me funciona mi filtro.... Ya que usan WINDOWS.EVENTS

Saben de algo referente al which para reemplazar los windows.events para filtrar por MOZILLA....????

-------------------------------------------------------------------------------------------------------

ME QUEDO con éste ULTIMO.... aunque me faltan los límites de los valores (1 - 100)....

Código Ejemplo 4.-:
Ver original
  1. <p>REPLACE de JavaScript pero permitiendo un punto decimal</p>
  2.  
  3. <script type="text/javascript">
  4. String.prototype.reverse=function(){return this.split('').reverse().join('');};
  5.  
  6. function numberblog(e){
  7. function f(){
  8. this.value=this.value.reverse().replace(/[^0-9.]/g,'').replace(/\.(?=\d*[.]\d*)/g,'').reverse();
  9.  
  10. }
  11. e.onkeyup=f
  12. e.onkeydown=f
  13. e.onkeypress=f
  14. e.onmousedown=f
  15. e.onmouseup=f
  16. e.onclick=f
  17. e.onchange=f
  18. e.onblur=f
  19. }
  20. </script>
  21. <p>
  22.  
  23. <input type="text" value="" id="v">
  24.  
  25. <script type="text/javascript">
  26. numberblog(document.getElementById("v"))
  27. </script>
  28. </p>

Este ejemplo es el mismo que el primero pero ya permite el punto.... El autor original de este código tengo entendido que es Ultimater...
Para ver el archivo original dirigirse a la página:

webdeveloper.com-forum-showthread.php?t=85606

FAVOR de reemplazar el GUIÓN ( -) por diagonal (/)


Saludos....Espero haberme expresado bien.... jejejejeje
  #7 (permalink)  
Antiguo 08/03/2012, 13:26
 
Fecha de Ingreso: marzo-2012
Mensajes: 1
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

Mi funcion, para permitir numeros y 3 decimales

function verificarNumero(evt){
// Espacio = 8, Enter = 13, '0′ = 48, '9′ = 57, '.' = 46
var key = nav4 ? evt.which : evt.keyCode;
var mensaje = $('cuotaArticulo').value;
for(var i = 0; i<mensaje.length; i++){
if(mensaje.charAt(i) =='.'){
if((key == 8)){
return key;
}
else
if((key == 46) || mensaje.charAt(i+3)){
return false;
}
}
}

return (key <= 13 || (key >= 48 && key <= 57) || key == 46);
}
  #8 (permalink)  
Antiguo 10/07/2015, 13:46
Avatar de nolose  
Fecha de Ingreso: diciembre-2007
Ubicación: España
Mensajes: 165
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Validación de campos numéricos POSITIVOS y con 3 decimales...

Posteo una nueva respuesta, porque sólo he encontrado este POST y me ha costado encontrar un a solución:

Aplicando esta expresión regular funciona:

^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$

i.e. this is a digit in the range 1-9 followed by up to 2 other digits then zero or more groups of a full stop followed by 3 digits then optionally your comma and digits as before.


Ejemplo:

if((/^[1-9]\d{0,2}(\.\d{3})*(,\d+)?$/).exec(document.f1.consumo.value)==null){
$bool_error = false;
}
else{
$bool_error = true;
}
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.
Tema Cerrado




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