2011-11-29 44 views
0

我有一個字符串,我需要將它解析爲一個浮點數,但首先我需要替換它,如果它不是一個數字(整數或浮點數),所以我是想要創建一個正則表達式來做到這一點正則表達式替換不是浮動的字符串

我嘗試的結果NaN的

我的一個最好的嘗試是

var $replace = $text.replace(/^[^d.]*/, ''); 
var $float = parseFloat($replace); 

可有人告訴我,我做錯了什麼?

+0

您的正則表示更換零個或多個字符從字符串的開頭不是'd'或'''什麼都沒有......你想要*替換/刪除什麼? –

+0

我試圖替換一切,那不是一個數字(或一個浮點數中使用的) – The87Boy

+0

爲什麼要在變量中加上一個美元符號? – NullUserException

回答

0
if (! isNaN($text)) 
    $float = parseFloat($text); 
else 
    $float = 0; // or whatever 
+1

這隻回答問題的一部分,因爲它沒有解決OP正在使用的錯誤正則表達式 – NullUserException

1

如果你真的來代替一切,那不是一個數字,那就試試這個:

var $replace = $text.replace(/[^\d.]/g, ''); 
var $float = parseFloat($replace); 

這將取代"123a3d2"一個字符串的"12332"的字符串。

+0

如果'$ text =' hello.world''? – NullUserException

+0

@NullUserException然後是'$ float == NaN'。我的意思是,我會做一個驗證*,這實際上是一個數字,而不是去掉字符,但這不是問題。 Ø p問。 –

+1

'/ [^ \ d。]/g'允許放置儘可能多的'.'。例如'12.34.5'和'1 .... 2 ... 3..45'的作品。 – Mistalis

1

它看起來像你想從字符串的開始去除「非數字」字符,然後將其轉換爲浮點數。一個天真的做法是:

var s = input.replace(/^[^\d.]+/, ''); 
var n = parseFloat(s); 

這適用於像「foo123」的投入,但會失敗的「foo.bar.123」。爲了解析這一點,我們需要一個更復雜的正則表達式:

var s = input.replace(/^(.(?!\d)|\D)+/, ''); 
var n = parseFloat(s); 

另一種方法是通過字符,直到我們找到一個有效的float剝除輸入字符:

function findValidFloat(str) { 
    for (var i = 0; i < str.length; i++) { 
     var f = parseFloat(str.substr(i)) 
     if (!isNaN(f)) 
      return f; 
    } 
    return NaN; 
} 
相關問題