2012-05-04 18 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會說,這不是數字.. 假設是它是一個數.. 當我把另一個條件

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

它會驗證1A爲數字

+0

嘗試在骨幹網使用這種方法http://stackoverflow.com/questions/9188998/obj-length-obj-length-in-javascript – Tamil

回答

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

這會爲TRUE;返回true,雖然,假的' 0' –

+0

@Joakim:是的,編輯了相應的答案 – KooiInc

+0

這是好的,但是當值是0 ..它是假的..當我改變爲=== 0它不會相應地發揮作用 –

0

這是因爲parseIntparseFloat將一個號碼後扔掉的信,並解析4K4。添加一個附加條件:isFinite(prodFilterValue)並且應該處理這些情況。

parseIntparseFloat只有在第一個字符無法轉換爲數字時才返回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