Vérifier si une variable contient une valeur numérique en Javascript?
En PHP, il est assez facile:
is_numeric(23);//true
is_numeric("23");//true
is_numeric(23.5);//true
is_numeric(true);//false
Mais comment je peux le faire en Javascript?
Je pourrais utiliser une expression régulière, mais est-il une fonction pour ça?
source d'informationauteur Vordreller | 2009-03-01
Vous devez vous connecter pour publier un commentaire.
Ce sujet:
La isNaN fonction intégrée est utilisée pour vérifier si une valeur est pas un certain nombre.
Mise à jour: Christoph est à droite, en JavaScript les types Boolean sont convertibles en un Nombre, retour le 1 pour vrai et 0 pour faux, donc si vous évaluer
1 + true
le résultat sera 2.Considérant ce problème j'ai mis à jour la fonction pour empêcher la conversion des valeurs booléennes à sa représentation numérique.
Je ne pense pas que l'une des suggestions jusqu'à maintenant. Par exemple
n'est pas parce que
parseFloat()
ignore fuite des caractères non numériques.Pour contourner ce problème, vous pouvez comparer la valeur retournée à celui retourné par un casting via
Number()
(ou de manière équivalente en utilisant unaire+
mais je préfère le cast explicite):Cela va encore fonctionner si les deux fonctions renvoient
NaN
parce queNaN !== NaN
esttrue
.Une autre possibilité serait d'abord jeté à la chaîne, puis le nombre et vérifiez ensuite
NaN
c'est à direou, de manière équivalente, mais moins lisible (mais probablement plus rapide)
Si vous souhaitez exclure de l'infini de valeurs, utilisez
isFinite()
au lieu de!isNaN()
c'est à direLe cast explicite via
Number()
est en fait inutile, carisNan()
etisFinite()
cast nombre implicitement - c'est la raison pour laquelle!isNaN()
ne fonctionne pas!À mon avis, la solution la plus appropriée serait donc
Comme Matthieu l'a souligné, la deuxième approche ne permet pas de gérer les chaînes qui ne contiennent que des espaces correctement.
Il n'est pas difficile à résoudre - utiliser le code de Matthieu commentaire ou
Vous aurez à décider si c'est toujours plus agréable que de comparer les résultats de
parseFloat()
etNumber()
.Vérification des types en javascript, vous pouvez utiliser le
typeof
opérateur:Donc:
Si vous voulez forcer la valeur d'une variable de nombre entier, vous pouvez utiliser
parseInt(x, 10)
qui va analyser la valeur d'un entier en base 10. De même, vous pouvez utiliserparseFloat
si vous voulez une valeur à virgule flottante. Cependant, celles-ci ont toujours contraindre quel que soit le type de sorte de passagenull
true
etc retournera toujours un nombre. Toutefois, vous pouvez vérifier si ses un nombre valide en appelantisNaN
.Afin de, mettre tous ensemble:
ou
Cette vérification pour les valeurs numériques, y compris les négatifs et les nombres à virgule flottante.
@Vordreller: j'ai corrigé les Regex. Il devrait fonctionner correctement maintenant.
Cela devrait faire l'affaire.
Voici ce que je suis venu avec:
Cela devrait fonctionner avec des flotteurs et des entiers, positifs et négatifs. Je ne sais pas à propos de l'infini, comme certaines des réponses ci-dessus ont discuté.
Si votre valeur peut être un nombre et pas toujours une chaîne de caractères, vous pouvez modifier l' = = = = = et il va traiter les deux à la fois.
Voici quelques repères pour isNaN vs isFinite et typeof === "nombre"
http://jsperf.com/isnan-vs-isfinite-vs/3
Apparemment typeof === "nombre" est environ 5 fois plus rapide