Pregunta

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

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

if (isANumber){
    ..
}

Sin embargo, se dio cuenta de que también permite + y -. Básicamente, quiero asegurarme de una input contiene sólo dígitos y no hay otros caracteres. Desde +100 y -5 son ambos números, isNaN() no es el camino correcto a seguir. Tal vez una expresión regular es lo que necesito? ¿Algún consejo?

¿Fue útil?

Solución

¿qué tal

var isnum = /^\d+$/.test(val);

Otros consejos

string.match(/^[0-9]+$/) != null;
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

Si desea ayuda incluso para valores de coma flotante (valores separados por punto), entonces usted puede utilizar esta expresión:

var isNumber = /^\d+\.\d+$/.test(value);

Esto es lo que quiere

function isANumber(str){
  return !/\D/.test(str);
}

Aquí hay otro interesante, forma legible para comprobar si una cadena contiene sólo dígitos.

Este método funciona mediante la división de la cadena en una matriz mediante el propagación operador , y luego utiliza el every() método para probar si todos los elementos (caracteres) de la matriz están incluidos en la cadena de '0123456789' dígitos:

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

Bueno, puede utilizar la siguiente expresión regular:

^\d+$

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 los códigos de carbonilla para "0" y "9", respectivamente.

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

A pesar de esto devolverá false en las cadenas con ceros iniciales o finales.

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

Si una cadena contiene sólo dígitos se devolverá null

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top