2012-03-15 34 views
239

純JavaScript中是否有像IsNumeric這樣的函數?我知道jQuery有這個函數來檢查整數。有沒有像JavaScript中的IsNumeric函數來驗證數字的功能?

+2

如果你碰巧使用jQuery你可以使用$ .isNumeric那是在1.7版本引入。 http://api.jquery.com/jQuery.isNumeric/ – Stefan 2012-03-15 09:06:12

+0

選中此問題(http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric)。 – Zeina 2012-03-15 08:56:19

+0

在純JavaScript中:https://github.com/jonschlinkert/is-number – 2018-02-08 22:28:43

回答

390

有沒有ISNUMERIC類型的功能,但你可以這樣做:

if(parseInt(yourVal, 10) > 0) { 
    ...numeric value 
} 

或添加您自己:

function isNumeric(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

注:由於parseInt()是不檢查數字的正確方法是「不應該被使用」。

+45

使用parseInt是不正確的方法。因此,'parseInt('12343asdfd',10)'將變成數字。 – dfsq 2012-03-15 08:57:48

+13

我不明白'parseFloat'是多麼的好。 'parseFloat('12343asdfd')'也導致編號爲'12343'(至少在我的瀏覽器中 - 「Chromium 39.0.2171.65 Ubuntu 14.10(64位)'')。實際上'parseInt('12343asdfd',10)=== parseFloat('12343asdfd')'是'true'。 – Thor84no 2014-12-04 11:21:30

+5

此解決方案用於/取自Jquery庫$ .isNumeric(obj)http://api.jquery.com/jquery.isnumeric/ – ThdK 2015-01-12 12:12:31

172

這本應幫助:

function isNumber(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 

很好的鏈接:Validate decimal numbers in JavaScript - IsNumeric()

+2

不適用於'isNumber('2')'。它返回true。 – 2017-01-23 09:57:30

+1

@Dimko Desu,那是因爲'2'不是數字,而是2。嘗試不帶撇號。 – Doruk 2017-02-10 10:23:06

+1

@Doruk我寫了同樣的。 ''2'不是一個數字,它是一個字符串。該函數應該返回false。但是這個解決方案返回'true'。這是不對的。 – 2017-02-10 12:06:43

19

有JavaScript函數isNaN這將做到這一點。

isNaN(90) 
=>false 

所以可以通過

!isNaN(90) 
=>true 
+31

,除了「」和真假,它們不是一個數字...... – commonpike 2012-11-30 16:17:24

+3

我得到了'isNaN(null)=== false' – jayflo 2016-06-08 21:50:16

+0

'isNaN(「null」)=== true; isNaN(null)=== false;'對我來說 – cmeza 2018-02-14 16:14:37

8

isFinite的(字符串(n))的返回true對於n = 0或 '0', '1.1' 或1.1檢查數字,

但對於'1狗'或'1,2,3,4',+ - 無窮大和任何NaN值都是錯誤的。

+17

isFinite(null) - > true,isFinite([]) - > true,isFinite('')true – prototype 2013-02-07 17:11:19

+1

從ES2015開始,有[Number.isFinite](https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) – 2017-09-20 14:40:10

12
var str = 'test343', 
    isNumeric = /^[-+]?(\d+|\d+\.\d*|\d*\.\d+)$/; 

isNumeric.test(str); 
+5

那麼,根據使用情況,這可能實際上是這裏最糟糕的答案。例如,這會返回''1'或'0x01'的'false',本地化不會被考慮在內...... – 2014-07-25 20:49:38

+1

如果您正在從字符串或用戶輸入中讀取塊,我更喜歡這個答案,isNaN和parseInt會導致不需要的誤報,如「123abc」,「2e1」,「0x2」等。(甚至jQuery.isNumeric也會解析爲真)。我會用這樣的'function isNumeric(str){return /^\d*\.{0,1}\d*$/.test(str); }' – ebob 2017-05-01 19:19:46

+0

那麼,根據使用情況,它可能實際上是這裏最好的答案。 – 2017-12-20 19:19:11

74
function IsNumeric(val) { 
    return Number(parseFloat(val)) === val; 
} 
+5

我認爲這裏的更新版本實際上是最好的答案。我覺得奇怪的是它的票數最少。我一開始以爲,如果用'NaN'調用'IsNumeric',它可能會失敗,但由於NaN的怪癖,它不等於任何實際上可以正常工作的東西。 – Thor84no 2014-12-04 11:31:12

+2

我想你也可以將演員放到'Number()',並依靠雙等於做一點轉換: 'let isNumeric =(val)=> parseFloat(val)== val;' – 2016-08-31 11:40:11

+0

根據我的要求,我相信許多其他開發人員應該是它應該是 函數IsNumeric(val){ return Number(val)== val; } 因此,它忽略空字符串的情況。因爲我只想驗證是否輸入了無效值。同時允許不是數字的空字符串。 我認爲所有三個答案都很好根據情景 – 2016-09-01 22:40:27

相關問題