数字和浮点验证不成功

时间:2012-05-04 09:07:58

标签: javascript

我有一个验证函数(只接受整数和浮点数)

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验证为数字

3 个答案:

答案 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)

这是因为parseIntparseFloat会丢弃一个数字后面的任何字母,并将4K解析为4。添加一个附加条件:isFinite(prodFilterValue),这应该处理这些情况。

如果第一个字符无法转换为数字,

parseIntparseFloat将仅返回NaN。

请注意,parseInt也会处理十六进制等值:

parseInt("0xF"); // 15