Добавление 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);