2013-07-07 60 views
1

我想驗證價格字段。我正在試試這個:isFinite的空間給出真實值

var productId = document.getElementById("productId"); 
var productName = document.getElementById("productName"); 
var productPrice = document.getElementById("price"); 

alert(isFinite(productPrice.value)); 

if(isNaN(productPrice.value)||!isFinite(productPrice.value)){ 
    error = document.getElementById("priceError"); 
    error.innerHTML = "Please enter correct value"; 
    productPrice.style.border="thin solid red"; 
}else{ 
    error = document.getElementById("priceError"); 
    error.innerHTML = ""; 
} 

只有當輸入是空格/多個空格時,行警告纔會讓我真實。 這是我的HTML頁面。

<td>Price</td> 
<td><input type = "text" id = "price" size = "14"/></td> 

感謝

+0

你有什麼在'productPrice.value'? – mishik

+0

任何_String_的isFinite,其中'+ string'不是'+'/'-''Infinity'或'NaN'將是'true'。 –

+0

@mishik:編輯 – NewUser

回答

2

爲什麼出現這種情況我不能說,但是這個代碼就可以解決這個問題

isFinite(parseFloat(" ")) // false 
// because --> 
parseFloat(" "); // => result NaN 
// tested in Chrome 27+ on Win7 

在isNaN here的MDN參考資料 它說

isNaN(" ");  // false: a string with spaces is converted to 0 which is not NaN 

Upd吃:

在isFinite的的參考發現Here它指出,如果該說法是isFinite的只有返回false:

  • NaN
  • 正無窮大,(Number.POSITIVE_INFINITY
  • 負無窮大(Number.NEGATIVE_INFINITY ) 在任何其他情況下,它將返回true。 (就像Paul S提到的那樣)

現在我想我得到了所有鬆散的結局,並在那個過程中學到了一些東西。 :)

+0

很好的答案。簡單! +1 – NewUser

+0

我發現你的答案很好。感謝您的幫助。 – NewUser

0

你可以用reqular表達式來做到這一點。

試試這個。

function validatePrice() { 
    var el = document.getElementById('price'); 
    if ( 
     el.value.length < 14 && 
     /^ *\+?\d+ *$/.test(el.value) 
     ) 
    { 
     return true; 
    } 
    return false; 
} 

該函數檢查輸入是否爲正整數。我不知道你是否也想浮動值。 如果你這樣做,將正則表達式切換到這個/^* +?\ d +((。|,)\ d +)? * $/

0

window.isFinite,您必須知道window.isNaN遭遇的問題coercing types

window.IsNaN摘要

確定值是否是NaN與否。小心,這個功能是破損的 。您可能對ECMAScript 6 Number.isNaN感興趣。

例子

isNaN(NaN);  // true 
isNaN(undefined); // true 
isNaN({});  // true 

isNaN(true);  // false 
isNaN(null);  // false 
isNaN(37);  // false 

// strings 
isNaN("37");  // false: "37" is converted to the number 37 which is not NaN 
isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN 
isNaN("");  // false: the empty string is converted to 0 which is not NaN 
isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN 
// This is a false positive and the reason why isNaN is not entirely reliable 

isNaN("blabla") // true: "blabla" is converted to a number. Parsing this as a number fails and returns NaN 

在ECMAScript中6有新的方法Number.isNaNNumber.isFinite解決這些問題。(of course these are not available in many browsers

Number.isFinite相當於

function isFinite(number) { 
    return typeof number === "number" && window.isFinite(number); 
} 

所以,作爲一個解決方案,你需要考慮這樣的事情(跨瀏覽器)。

注:該解決方案將仍然允許你輸入十六進制或科學記數法, 「是0xA」, 「1E10」

的Javascript

function isFinite(number) { 
    return typeof number === "number" && window.isFinite(number); 
} 

function trim(string) { 
    return string.replace(/^\s+|\s+$/g, ""); 
} 

var price = document.getElementById("price"); 

price.onchange = function (e) { 
    var evt = e || window.event, 
     target = evt.target || evt.srcElement, 
     value = trim(target.value) || "NaN", 
     number = +value; 

    console.log("number:", number); 
    console.log("isFinite:", isFinite(number)); 
} 

jsfiddle