Vous pouvez utiliser une expression rationnelle:
var regex = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
alert("Number is valid");
Si vous ne cherchez pas à être aussi stricte avec les décimales vous pourriez trouver plus facile d'utiliser le unaire (+
) opérateur de jeter à un certain nombre de vérifier sa validité:
var numStr = "123.20";
var numNum = +numStr; // gives 123.20
Si la chaîne de numéro est incorrect, il retournera NaN
(Non un numéro), quelque chose que vous pouvez tester facilement:
var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
alert("numNum is not a number");
Il sera, bien sûr, permettre à un utilisateur d'ajouter plus de décimales mais vous pouvez couper tout congé supplémentaire en utilisant number.toFixed(2)
pour arrondir à 2 décimales. parseFloat
est beaucoup moins strict avec l'entrée et va chercher le premier nombre qu'il peut trouver sur une chaîne, tant que cette chaîne commence par un nombre, par exemple. parseFloat("123abc")
donnerait 123
.
est la partie après la virgule en option? est '103.5' valide, ou devrait-il être' 103.50'? – Amarghosh
partie après décimale est facultative. – dev646