Se podría utilizar una expresión regular:
var regex = /^\d+(?:\.\d{0,2})$/;
var numStr = "123.20";
if (regex.test(numStr))
alert("Number is valid");
Si usted no está buscando ser tan estricto con las cifras decimales Puede que le resulte más fácil utilizar el unario (+
) del operador para echar a un número para verificar su validez:
var numStr = "123.20";
var numNum = +numStr; // gives 123.20
Si la cadena de números no es válida, volverá NaN
(No un número), algo que se puede comprobar fácilmente para:
var numStr = "ab123c";
var numNum = +numStr;
if (isNaN(numNum))
alert("numNum is not a number");
Será, por supuesto, permitir a un usuario añadir más decimales, pero se puede cortar cualquier descuento usando number.toFixed(2)
para redondear a 2 decimales. parseFloat
es mucho menos estricto con la entrada y arrancará el primer número que pueda encontrar de una cadena, siempre que esa cadena comience con un número, por ej. parseFloat("123abc")
rendiría 123
.
es la parte que sigue punto decimal opcional? es '103.5' válido, o debería ser' 103.50'? – Amarghosh
parte después del decimal es opcional. – dev646