Avatar ·

Comment vérifier correctement si une chaîne est un nombre en JavaScript ? Fonction IsNumeric()

Bonjour à tous ! J'écris en JavaScript et j'ai rencontré un problème typique : je dois vérifier si la valeur saisie par l'utilisateur est un nombre. Par exemple, il y a un formulaire où l'utilisateur saisit le prix d'un produit, et je veux m'assurer que c'est bien un nombre, pas du texte. J'ai essayé d'utiliser isNaN(), mais il se comporte étrangement. Par exemple :
console.log(isNaN('123')); // false — semble être un nombre
console.log(isNaN('12.3')); // false — aussi un nombre
console.log(isNaN('')); // false — la chaîne vide est considérée comme un nombre ?!
console.log(isNaN('  ')); // false — les espaces aussi sont un nombre ?
console.log(isNaN('abc')); // true — c'est compréhensible
console.log(isNaN(true)); // false — true=1, c'est un nombre ?!
console.log(isNaN(null)); // false — null=0, aussi un nombre ?!
J'ai besoin que la fonction IsNumeric() retourne true uniquement pour les nombres décimaux normaux (entiers et flottants avec un point), et pour les chaînes vides, les espaces, les valeurs booléennes, null, undefined et autres déchets — false. Je souhaite aussi que les nombres négatifs soient supportés.