Question

Je veux vérifier si un string contient des chiffres. Je ceci:

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

if (isANumber){
    ..
}

Mais réalisé qu'il permet également + et -. Au fond, je veux vous assurer un input ne contient que des chiffres et pas d'autres caractères. Depuis +100 et -5 sont les deux chiffres, isNaN() n'est pas la bonne façon de procéder. Peut-être une expression rationnelle est ce que je dois? Des conseils?

Était-ce utile?

La solution

Que diriez-vous

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

Autres conseils

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 vous voulez soutenir même pour les valeurs flottantes (séparés par des points de valeurs), vous pouvez utiliser cette expression:

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

est ce que vous voulez

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

Voici une autre façon intéressante, lisible pour vérifier si une chaîne contient des chiffres.

Cette méthode fonctionne en divisant la chaîne en un tableau en utilisant le opérateur propagation , et utilise ensuite le sont inclus dans la chaîne de '0123456789' chiffres:

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

Eh bien, vous pouvez utiliser l'expression rationnelle suivante:

^\d+$

Voici une solution sans utiliser des 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 type caractère de "0" et "9", respectivement.

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

Bien que cela retournera false sur les chaînes commençant ou zéros à la fin.

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

Si une chaîne contient des chiffres seulement il retournera null

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top