Quiero comprobar si un string contiene sólo dígitos. He utilizado este:

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

Pero se dio cuenta de que también permite que el + y -. Básicamente, quiero asegúrese de que un input contiene SÓLO dígitos y no otros personajes. Desde +100 y -5 son ambos números, isNaN() no es el camino correcto a seguir.
Tal vez una regexp es lo que necesito? Algún consejo?

InformationsquelleAutor patad | 2009-11-22

10 Comentarios

  1. 540

    ¿

    var isnum = /^\d+$/.test(val);
    • Esto es genial! Tengo curiosidad ¿\d no se refiere a los dígitos que es el decimal?
    • Algunos idiomas implementar de manera diferente, pero en JavaScript, \d es exactamente equivalente a [0-9].
    • Aquí usted puede encontrar documentación acerca de cómo Regular Expressions trabajo
    • /^\d*$/ lugar, si usted encuentra una cadena vacía que contiene sólo dígitos.
    • Lo siento por mi pobre inglés y me deja la pregunta: «si usted piensa que una cadena vacía para ser tener sólo dígitos
  2. 16
    String.prototype.isNumber = function(){return /^\d+$/.test(this);}
    console.log("123123".isNumber()); //outputs true
    console.log("+12".isNumber()); //outputs false
    • Se considera mala práctica en Javascript para modificar los prototipos de objetos integrados (principio de la menor sorpresa, y los posibles conflictos en el futuro ECMA versiones) – considerar isNumber = () => /^\d+$/.test(this); en su lugar, y su uso como console.log(isNumber("123123));
    • FWIW, en 2009, cuando esta respuesta fue publicado, aún no era considerado una mala práctica. Varios jQuery competidores que existían entonces, antes de jQuery aún tenía que ganar, todos practicaban prototipo de extensiones.
  3. 9

    Si quieres apoyar incluso para valores de coma flotante (Dot valores separados), entonces usted puede utilizar esta expresión :

    var isNumber = /^\d+\.\d+$/.test(value);
    • sin embargo, si usted no utiliza un flotador en lugar de int devolverá false tal vez el uso de «?» después de «.\» resuelto eso. Sugiero que este /^\d+[\.,\,]?\d+$/.de prueba(valor) para permitir que tanto la coma y el punto decimal (más tarde tal vez se puede transformar coma a punto)
    • la expresión regular que usted sugirió que sólo será capaz de encontrar los números con decimales o superior a 9. Si el cambio de la primera \d+ a \d*?, será capaz de igualar 0 – 9, así como los números tales como .333
    • Cierre: var isNumber = /^\d*\.?\d+$/.test(value) — con ‘3.5’, ‘.5’, ‘3’ — no coincide con ‘3.’
  4. 5

    He aquí otro interesante, legible forma de comprobar si una cadena contiene solo dígitos.

    Este método funciona mediante la división de la cadena en una matriz, mediante la la propagación del operador y, a continuación, utiliza el cada() método para comprobar si todos los elementos (caracteres) en la matriz de se incluyen en la cadena de dígitos '0123456789':

    JS:

    const digits_only = string => [...string].every(c => '0123456789'.includes(c));
    
    console.log(digits_only('123')); //true
    console.log(digits_only('+123')); //false
    console.log(digits_only('-123')); //false
    console.log(digits_only('123.')); //false
    console.log(digits_only('.123')); //false
    console.log(digits_only('123.0')); //false
    console.log(digits_only('0.123')); //false
    console.log(digits_only('Hello, world!')); //false

    • Creo que tu definición de «legible» pueden variar de una mina.
    • Usted tiene derecho a su opinión.
  5. 2

    Aquí es una solución sin el uso de expresiones regulares:

    function onlyDigits(s) {
      for (let i = s.length - 1; i >= 0; i--) {
        const d = s.charCodeAt(i);
        if (d < 48 || d > 57) return false
      }
      return true
    }

    donde 48 y 57 son el char códigos para «0» y «9», respectivamente.

  6. 2
    function isNumeric(x) {
        return parseFloat(x).toString() === x.toString();
    }

    Aunque esto devolverá false en cadenas con iniciales o finales de los ceros.

  7. -1
    c="123".match(/\D/) == null #true
    c="a12".match(/\D/) == null #false

    Si una cadena contiene solo dígitos devolverá null

Dejar respuesta

Please enter your comment!
Please enter your name here