1. 程式人生 > >Js 在字串中提取數字

Js 在字串中提取數字

一 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了。