Question

Quelle est la meilleure façon de savoir si une valeur en JavaScript est un seul chiffre. J'ai fait quelque chose comme

var valAsString = '' + val;
if (valAsString.match(/\d/) {}

Clarification: Je veux dire l'un des 0,1,2,3,4,5,6,7,8,9

De plus, devrais-je avoir du travail? Je suis surpris de voir combien de façons différentes de manifester pour cela.

Était-ce utile?

La solution

La /\d/ Regexp correspondra à un chiffre n'importe où sur une chaîne, par exemple dans "foo1" correspondra "1".

Pour une approche regexp, il faut quelque chose comme ça, pour vous assurer que la chaîne contiendra un seul chiffre:

if (/^\d$/.test(val))  {
  //..
}

Notez que j'utilise le test Méthode, qui est recommandée lorsque vous souhaitez seulement vérifier si une chaîne correspond également au modèle test La méthode se convertira en interne pour piquer l'argument.

Une autre approche non regexp courte:

function isDigit(val) {
  return String(+val).charAt(0) == val;
}

Autres conseils

Ummm, vérifiez si sa longueur de chaîne est égale à un?

if (typeof(val) === "number")
    {
    var valAsString = val.toString(10);
    if (valAsString.length === 1) {}
    }

Cela n'acceptera pas les nombres ou les nombres négatifs avec des composants décimaux.

Si vous ne voulez pas inclure les négatifs, cela fonctionnera, tout comme votre solution.

var valAsString = val.toString();
if (valAsString.length === 1) {}

Vous pouvez simplement vérifier si la chaîne se situe entre -10 et 10 (en supposant que vous souhaitez inclure des négatifs). Ce sera le plus rapide, mais ne fonctionnera pas pour les non-tirages, donc c'est probablement mieux évité.

Si vous voulez inclure des négatifs, je vérifierais probablement si le numéro est un entier, j'irais avec quelque chose comme ceci:

var isSingleDigitIncludingNegatives = function( arg ) {
    return ((typeof(myNum)=='number') && (myNum.toString().indexOf('.')==-1)) && (( -10 < arg ) && ( arg < 10))

En admettant que val est déjà numérique ...

if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}

Vous pouvez utiliser la modification ci-dessous de votre expression régulière:

valAsString.match(/^\d$/)

je pense

(+val + val % 1 + 10) % 10 === val

devrait le faire, en supposant que vous voulez uniquement accepter les valeurs de type number.

Une solution plus propre est

typeof val === 'number' && val >>> 0 === val % 10

qui peut être facilement adapté pour inclure les valeurs d'autres types.

Que diriez-vous quelque chose comme ça:

var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top