2012-05-04 15 views
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を検証するとき、それが数値ではないと言うだろうが... が思いますそれが数値であることを..私はそれはそれuをチェックし、数値

+0

http://stackoverflow.com/questions/9188998/obj-length-obj-length-in-javascriptしかし 'true'にするためにtrueを返します – Tamil

答えて

2

として1Aを検証します

if((parseFloat(prodFilterValue) == parseInt(prodFilterValue)) && !isNaN(prodFilterValue) || (prodFilterValue % 1 !=0)) 

別の条件を入れ を番号変換を歌う:

あなたの関数に適用
!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と評価されたことを覚えておいてください。 parseIntparseFloatは番号の後に任意の文字を捨て、そして4として4Kを解析するためです

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); 
} 
+0

をバックボーンに使用されるこの方法を試してみてください、と'のための偽0' –

+0

@ジョアキム:そう、それに応じて答えを – KooiInc

+0

これは良いですが、値が0のときは偽です。=== 0に変更したときにはそれに応じて機能していません –

0

:ような何か。追加の条件:isFinite(prodFilterValue)を追加して、それらのケースを処理する必要があります。

parseIntおよびparseFloatは、最初の文字を数値に変換できない場合にのみNaNを返します。

parseIntも進数などの数値を扱い、しかし注意してください:

parseInt("0xF"); // 15 
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"); 
} 
+0

まあ、 'isNaN ")'はfalseを返します。型強制は0になり、ブール値と同じです。 –

+0

あなたは私にそれを知らせてくれてありがとうございます。コードを少し変更してください – Adil

関連する問題