Foros del Web » Programando para Internet » Javascript »

Validar input numerico

Estas en el tema de Validar input numerico en el foro de Javascript en Foros del Web. Estoy validando un input con un número telefónico. Hasta ahora lo que tengo es lo siguiente: Código HTML: <input type= "text" value= "+569" id= "numbersOnly" ...
  #1 (permalink)  
Antiguo 15/09/2017, 08:00
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 10 meses
Puntos: 8
Validar input numerico

Estoy validando un input con un número telefónico.

Hasta ahora lo que tengo es lo siguiente:

Código HTML:
<input type="text" value="+569" id="numbersOnly" maxlength="12">

<script>
    var numbersOnly = document.getElementById("numbersOnly");
    numbersOnly.onkeyup = function myFunction() {
        numbersOnly.value = numbersOnly.value.replace(/[^0-9]/g, '');
    };
</script> 
Los 4 primeros caracteres no deben ser modificables ni tampoco deben ser incluidos en la validación. Vale decir, la validación solo debe hacerse desde la posición 5 en adelante. Tengo la idea, pero no me resulta
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X
  #2 (permalink)  
Antiguo 15/09/2017, 14:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Validar input numerico

Lo primero que necesitas hacer es bloquear el borrado de caracteres con la tecla Backspace cuando solo haya cuatro elementos en el valor de la caja de texto, y también el borrado con la tecla Del o Supr cuando el cursor del ratón se encuentre antes del cuarto elemento del valor de la caja de texto contando desde la izquierda. Cabe decir que necesitas apoyarte en un evento de teclado anterior al que usas. Podría ser el primero de ellos: keydown.

Código Javascript:
Ver original
  1. numbersOnly.addEventListener("keydown", function(event){
  2.     if ((event.which == 8 && this.value.length < 5) || (event.which == 46 && this.selectionStart < 4) || (event.which != 37 && event.which != 39 && this.selectionStart < 4)){
  3.         event.preventDefault();
  4.     }
  5. }, false);

Lo que hice fue establecer una serie de condiciones para controlar el comportamiento de los eventos del teclado. Primero: verifico que el código de la tecla pulsada (propiedad which) corresponda al de la tecla Backspace (código 8) y que la extensión del valor de la caja de texto (propiedad length) sea menos a 5, es decir, que haya 4 o menos elementos; y, segundo: que el código de la tecla pulsada corresponda al de la tecla Del o Supr (código 46) y que el cursor del ratón se encuentre en una posición (propiedad selectionStart) anterior a la número 4, es decir, en una ubicación en la que pueda borrar a alguno de los cuatro primeros elementos. Por último, existe una tercera condición, similar a la segunda, que verifica que no se haya pulsado las teclas direccionales de la izquierda (código 37) ni derecha (código 39) y que el cursor del ratón se encuentre antes del cuarto elemento del valor de la caja de texto; esto con el objetivo de que no se inserten más valores entre los cuatro primeros. Si alguna de ambas condiciones se diera, cancelo la ejecución del evento con el método .preventDefault().

Una vez que ya tenemos esto, debemos validar que los valores escritos a partir de la siguiente posición del cuarto elemento del valor de la caja de texto en adelante sean solo números. Por cuestiones prácticas, nos conviene validar todo el contenido ya que cabe la posibilidad de que el usuario inserte un valor no permitido entre los cuatro primeros elementos. Para este caso, sugiero que utilices un evento que incluya todas las acciones que se puedan realizar en un campo de texto, como es el evento input.

Código Javascript:
Ver original
  1. numbersOnly.addEventListener("input", function(){
  2.     this.value = this.value.replace(/[^0-9\+]/g, "");
  3.     this.value = this.value.substr(0, 4) + this.value.substr(4).replace(/\++/g, "");
  4. });

A tu expresión regular le añadí el "+" para que también lo valide el método .replace(). Luego de este reemplazo, realizo otro para eliminar los "+" que el usuario haya podido añadir después del cuarto elemento. Finalmente, concateno el bloque de los cuatro primeros elementos (lo sustraigo con el método .substr()) con el resto luego del último reemplazo.

DEMO

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 15/09/2017 a las 16:06 Razón: Mejora
  #3 (permalink)  
Antiguo 18/09/2017, 18:58
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 10 meses
Puntos: 8
Respuesta: Validar input numerico

te pasaste! muchas gracias!
gracias por tomarte el tiempo de responder y explicar tan convenientemente tu respuesta!
__________________
18 laaaaargos años en FDW... y soy de los pocos que ví correr sangre! :X

Etiquetas: input, numerico
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 11:50.