如果最后一位是".",加上0并不能解决点后有空格的情况。
我认为这样就涵盖了所有的情况,但你需要进行更严密的测试来验证。
var isNumeric = function(val, decimals) {
if (decimals <= 0) {
var re = /^\s*\d+\.?\s*$/;
return re.test(val);
} else {
var reString = "^\\s*((\\d+(\\.\\d{0," + decimals + "})?)|((\\d*(\\.\\d{1," + decimals + "}))))\\s*$"
var re = new RegExp(reString);
return re.test(val);
}
};
var test = function(val, decimals) {
document.write("isNumeric(" + val + ", " + decimals + ") = " + isNumeric(val, decimals) + "<br/>");
}
test("123", 0);
test("123", 5);
test(" 123.45", 2);
test(" 123.45", 3);
test(" 123.45", 1);
test(" ", 0);
test(" ", 5);
test(" 3.", 0);
test(" 3.", 12);
test(" .", 3);
test(" .321 ", 5);
.
而不跟任何数字?JavaScript 认为这是一个有效的数字,只要没有两个点在末尾 (isNaN(1.) //false
)。 - Jacob Stamm