亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在JavaScript中驗證十進制數 - IsNumeric()

在JavaScript中驗證十進制數 - IsNumeric()

ibeautiful 2019-05-24 16:13:34
在JavaScript中驗證十進制數 - IsNumeric()在JavaScript中驗證十進制數的最干凈,最有效的方法是什么?獎勵積分:明晰。解決方案應該干凈簡單??缙脚_。測試用例:01. IsNumeric('-1')      => true02. IsNumeric('-1.5')    => true03. IsNumeric('0')       => true04. IsNumeric('0.42')    => true05. IsNumeric('.42')     => true06. IsNumeric('99,999')  => false07. IsNumeric('0x89f')   => false08. IsNumeric('#abcdef') => false09. IsNumeric('1.2.3')   => false10. IsNumeric('')        => false11. IsNumeric('blah')    => false
查看完整描述

4 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

Arrrgh!不要聽正則表達式的答案。RegEx對此很苛刻,我不只是說性能。用你的正則表達式來制作微妙的,不可能發現錯誤是如此容易。

如果你不能使用isNaN(),這應該更好:

function IsNumeric(input){
    return (input - 0) == input && (''+input).trim().length > 0;}

以下是它的工作原理:

(input - 0)表達式強制JavaScript對您的輸入值進行類型強制; 必須首先將其解釋為減法運算的數字。如果轉換為數字失敗,則表達式將導致NaN。然后將此數字結果與您傳入的原始值進行比較。由于左側現在是數字,因此再次使用類型強制。既然來自雙方的輸入都是從相同的原始值強制轉換為相同的類型,那么您會認為它們應該始終相同(始終為真)。但是,有一個特殊規則說NaN永遠不會等于NaN,因此無法轉換為數字的值(并且只有無法轉換為數字的值)將導致錯誤。

檢查長度是針對涉及空字符串的特殊情況。另請注意,它會降低到您的0x89f測試,但這是因為在許多環境中,定義數字文字是一種可行的方法。如果要捕獲該特定方案,可以添加其他檢查。更好的是,如果這是你不使用的原因,isNaN()那么只需將自己的功能包裹起來isNaN(),也可以進行額外的檢查。

總之,如果您想知道某個值是否可以轉換為數字,實際上會嘗試將其轉換為數字。


我回去做了一些研究,為什么空白字符串沒有預期的輸出,我想我現在得到它:一個空字符串被強制0而不是NaN。在長度檢查之前簡單地修剪字符串將處理這種情況。

運行單元測試新代碼,它只在無限和布爾文字上失敗,唯一應該是問題的時候是你生成代碼(真的,誰會輸入文字并檢查它是否是數字?你應該知道),這將是一些奇怪的代碼生成。

但是,再一次,使用它的唯一原因是,如果由于某種原因你必須避免使用isNaN()。


查看完整回答
反對 回復 2019-05-24
  • 4 回答
  • 0 關注
  • 1172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號