web-dev-qa-db-fra.com

Vérifier si la chaîne ne contient que des chiffres

Je veux vérifier si une string ne contient que des chiffres. J'ai utilisé ceci:

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

if (isANumber){
    ..
}

Mais je me suis rendu compte que cela permettait aussi + et -. En gros, je veux m'assurer que la variable input contient SEULEMENT des chiffres et aucun autre caractère. Puisque +100 et -5 sont les deux nombres, isNaN() n'est pas la bonne façon de faire . Peut-être une expression rationnelle est-elle ce dont j'ai besoin? Des conseils?

222
patad

que diriez-vous

var isnum = /^\d+$/.test(val);
457
Scott Evernden
string.match(/^[0-9]+$/) != null;
50
Jason S
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false
13
balupton

Si vous souhaitez même prendre en charge les valeurs float (valeurs séparées par des points), vous pouvez utiliser cette expression: 

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

Voici ce que vous voulez

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

Eh bien, vous pouvez utiliser la regex suivante:

^\d+$
1
Joey
function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

Ceci retournera false sur les chaînes avec des zéros au début ou à la fin. 

1
Peter Hollingsworth

Voici un autre moyen intéressant et lisible de vérifier si une chaîne ne contient que des chiffres.

Cette méthode divise la chaîne en un tableau à l'aide de l'opérateur spread , puis utilise la méthode every() pour vérifier si tous les éléments (caractères) du tableau sont inclus dans la chaîne de chiffres '0123456789':

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

1
Grant Miller

Voici une solution sans utiliser d'expressions régulières:

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
}

où 48 et 57 sont les codes de caractère pour "0" et "9", respectivement.

0
SC1000