我有一个验证函数(只接受整数和浮点数)
function isNumeric(prodFilterValue)
{
if((parseFloat(prodFilterValue) == parseInt(prodFilterValue)) && !isNaN(prodFilterValue))
{
alert('numeric');
alert('hahahahhahaha');
$("#valuetxt1").css('background-color', 'white');
}
else
{
alert('HIIIIIIIIIII');
$("#valuetxt1").css('background-color', 'grey');
}
return prodFilterValue;
}
现在的问题是...... 当验证0.1时,它会说它不是数字.. 假设它是数字.. 当我提出另一个条件时
if((parseFloat(prodFilterValue) == parseInt(prodFilterValue)) && !isNaN(prodFilterValue) || (prodFilterValue % 1 !=0))
它会将1A验证为数字
答案 0 :(得分:2)
使用数字转换检查:
!isNaN(Number([value]));
// e.g.
isNumber = !isNaN(Number('.3421')); //=> true
isNumber = !isNaN(Number('nonumber.3421')); //=> false
isNumber = !isNaN(Number('1500032')); //=> true
// you can also just use the conversion
isNumber = Number('.3421'); //=> 0.3421
isNumber = Number('nonumer.3421'); //=> NaN
if (!isNumber) { /*...*/ }
// a hidden goodie: Number automatically trims the parameter
isNumber = Number(' .3421 '); //=> 0.3421
isNumber = Number(' .3421 \n'); //=> 0.3421
适用于您的职能:
function isNumeric(prodFilterValue,thousandsDelim) {
prodFilterValue = Number(prodFilterValue);
return prodFilterValue
? (alert('yeah!'), prodFilterValue)
: (alert('no sir'), false);
}
此外isNaN([value])
对[value]
应用隐式数字转换,因此您也可以使用它。
请注意,Number('')
,Number(null)
或Number('\t\n ')
评估为0,Number(true)
评估为1.因此,要完成,您必须额外做检查。类似的东西:
function isNumeric(prodFilterValue) {
prodFilterValue = prodFilterValue &&
/stri/i.test(typeof prodFilterValue) &&
prodFilterValue.replace(/^\s+|\s+$/,'').length
? Number(prodFilterValue)
: undefined;
return prodFilterValue && prodFilterValue !== 0
? (alert('yeah!'), prodFilterValue)
: (alert('no sir'), false);
}
答案 1 :(得分:2)
您可以检查它是否为数字,然后是浮点数或整数。
function checkNumber(numb1)
{
numb1 += ""; // to handle boolean when true / false is passed
if(numb1.length == 0) return false; // to handle empty string like checkNumber("")
if(isNaN(numb1))
alert("It is a number");
else
alert("It is not a number");
}
答案 2 :(得分:0)
这是因为parseInt
和parseFloat
会丢弃一个数字后面的任何字母,并将4K
解析为4
。添加一个附加条件:isFinite(prodFilterValue)
,这应该处理这些情况。
parseInt
和parseFloat
将仅返回NaN。
请注意,parseInt
也会处理十六进制等值:
parseInt("0xF"); // 15