Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/12/2009, 11:29
benjaminvera
 
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