Vérifiez si la chaîne ne contient que des chiffres
-
21-09-2019 - |
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?
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