2012-06-26 78 views
2

我需要驗證文本框條目。它應該只允許整數,因爲如果用戶在綁定期間在此字段中輸入字符,entityframework會失敗。parseFloat函數不能按預期工作

當用戶輸入在該領域10-dparseFloat返回true,因爲它需要10作爲數並忽略其餘值:

這裏是問題。雖然國際海事組織它應該拋出NAN錯誤,因爲輸入文本不能轉換爲浮動。

請看下面的樣品,你可以玩它。 http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parsefloat

我有興趣在上面的例子中得到NAN 40年的輸入。

document.write(parseFloat("40 years") + "<br />"); 

讓我知道如果我需要做一些更多的驗證。

+0

使用'$ .isNumeric('10 -d ');'或'$ .isNumeric('10年')'都WIL回報假。 –

+0

如果你想整數嘗試'parseInt(「string」,10)'。第二個參數是告訴它使用什麼數字基數的基數。在這種情況下,以10爲底。 – Jack

+0

實際上'parseFloat('10 -d')'返回的是'10'而不是'true'。請訪問http://es5.github.com/#x15.1.2.3以查看'parseFloat()'的工作原理。 – Teemu

回答

4

聽起來像你想使用isNaN函數。

isNaN('40'); //false, as '40' is a number 
isNaN('40 years'); //true, as '40 years' is not a number 

更新

如上所述,這不檢查整數。爲此,您可以使用

function isInt(value) { 
    return !isNaN(value) && value % 1 === 0; 
} 

這將對「40」,40,「40」返回true。並且對於「40-d」,「40.12」,40.12,「40年」是錯誤的。

jsFiddle Demo

如果您不想尾小數,那麼@ jakeclarkson的正則表達式的解決方案是更好的

2

如果你只想讓整數那麼你可以使用:

function isInteger(str) { 
    return /^[0-9]*$/.test(str); 
} 

isNaN將返回false如果您提供小數,即

isNaN("3.14"); // false, i.e. it is a number 

鑑於上述isInteger()function將正常工作,即

isInteger("3.14"); // false 
相關問題