在JavaScript中验证十进制数字最干净、最有效的方法是什么?
奖励积分:
清晰解决方案应干净简单。跨平台。
测试用例:
01. IsNumeric('-1') => true
02. IsNumeric('-1.5') => true
03. IsNumeric('0') => true
04. IsNumeric('0.42') => true
05. IsNumeric('.42') => true
06. IsNumeric('99,999') => false
07. IsNumeric('0x89f') => false
08. IsNumeric('#abcdef') => false
09. IsNumeric('1.2.3') => false
10. IsNumeric('') => false
11. IsNumeric('blah') => false
如果您希望让数值函数的预测值隐式严格(例如,不解析字符串),那么这应该会奏效。
function isNumeric(n, parse) {
var t = typeof(n);
if (parse){
if (t !== 'number' && t !=='string') return false;
return !isNaN(parseFloat(n)) && isFinite(n);
}else{
if (t !== 'number') return false;
return !isNaN(n) && isFinite(n) && !_.isString(n);
}
}
function isInteger(n, parse) {
return isNumeric(n, parse) && n % 1 === 0;
}
function isFloat(n, parse) {
return isNumeric(n, parse) && n % 1 !== 0;
}
如果您希望代码解析字符串,那么只需在parse参数中传递true即可。
这是对下划线contrib方法的修改,该方法隐式宽松,尝试解析字符串,甚至为isNumeric([1])返回true,这可能是人们真正的陷阱。我上面的方法也会更快,因为它只在parse=true时调用parseFloat()。
knockoutJs内置库验证函数
通过扩展它,该字段得到验证
1) 编号
self.number=ko.obsobservable(numberValue).exextend({number:true});
测试用例
numberValue = '0.0' --> true
numberValue = '0' --> true
numberValue = '25' --> true
numberValue = '-1' --> true
numberValue = '-3.5' --> true
numberValue = '11.112' --> true
numberValue = '0x89f' --> false
numberValue = '' --> false
numberValue = 'sfsd' --> false
numberValue = 'dg##$' --> false
2) 数字
self.number=ko.obsobservable(numberValue).exextend({digit:true});
测试用例
numberValue = '0' --> true
numberValue = '25' --> true
numberValue = '0.0' --> false
numberValue = '-1' --> false
numberValue = '-3.5' --> false
numberValue = '11.112' --> false
numberValue = '0x89f' --> false
numberValue = '' --> false
numberValue = 'sfsd' --> false
numberValue = 'dg##$' --> false
3) 最小值和最大值
self.number=可观察(numberValue).扩展({min:5}).扩展;
此字段仅接受介于5和10之间的值
测试用例
numberValue = '5' --> true
numberValue = '6' --> true
numberValue = '6.5' --> true
numberValue = '9' --> true
numberValue = '11' --> false
numberValue = '0' --> false
numberValue = '' --> false