Js 在字串中提取數字
阿新 • • 發佈:2019-02-19
一 parseInt()方法:
首先想到的是js提供的parseInt方法,例子:
var str ="4500元"; var num = parseInt(str); alert(num);//4500
結果就是我們想要的, 以為就這麼簡單,那就錯了。如果字串前面有非數字字元,上面這種方法就不行了:
var str ="價格:4500元"; var num = parseInt(str); alert(num);//NaN
這個例子中會彈出NaN,解決這個問題,最簡單的方法是:如果知道字串格式後,去掉前面的非字元。上面這個例子中,去掉子串"價格:"
var str ="價格:4500元"; var num = parseInt(str.substring(1).substring(1).substring(1)); alert(num);//4500
顯然,這樣就顯得比較麻煩了。另外,java語言中也有parseInt()方法,裡面傳的字串中只要有非數字,myeclipse就會提示錯誤。Js中的parseInt()方法傳的可以有非數字字串,只要字串前面就照樣執行,知道遇到非數字字元停下來。比如,以下這個例子。
var str ="4500元,等級:2";var num = parseInt(str); alert(num);//4500
不會報錯,結果還是一樣,因為系統查詢到"元"時就停止了,不管後面有沒有數字都不會再提取了。所以不會出現45002的結果。Js中有很多這樣的例子,比如正則不寫/g,預設查詢符合的第一個子字串就跳出,並不會往下面進行。本文第二個例子出現NaN,也是這個原因,請細細體會。
關於parseInt()方法,還可以有第二個引數。第二個引數表示第一個引數的進位制,看個例子:
parseInt("11", 2); // 結果:3 如果想把一個二進位制數字字串轉換成整數值,只要把第二個引數設定為 2 就可以了。
後一個引數不寫,預設按10進位制轉換。
最後一個問題,parse函式是幹嘛的?程式之間傳遞的都是字串(文字型別),而使用時要轉換成需要的型別。parse函式是把字串轉換成我們需要的型別,比如parseInt(),$.parseHTML()。
二、正則
前面說到正則。事實上,正則處理起來就比較簡單了,替換掉非數字的字元就可以了。例子:
var s ="價格4500元"; var num= s.replace(/[^0-9]/ig,""); alert(num);//4500
如果遇到字元夾帶數字的情況:
var s ="價格4500元,等級:2"; var num = s.replace(/[^0-9]/ig,""); alert(num);//45002
這個時候結果就是45002了。