0

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

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

4

3 回答 3

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");
}
于 2012-05-04T09:27:42.820 回答
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)or Number('\t\n ')all 评估为 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);
}
于 2012-05-04T09:09:41.543 回答
0

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

parseInt并且parseFloat仅在第一个字符无法转换为数字时才返回 NaN。

但请注意,它parseInt也处理像十六进制这样的值:

parseInt("0xF"); // 15
于 2012-05-04T09:14:04.287 回答