2016-11-25 34 views
0

我一直有一個「南」想什麼時候從字符串「parseInt函數或parseFloat」喜歡「Sometext 330」parseFloat()從字符串中間

Var a = "Sometext 330" 
return parseFloat(a); 

,它將返回「南」,但我需要整數或浮點數330

+0

當然,因爲第一個字符不是一個數字! –

+0

你將不得不打斷字符串,並檢查你不能解析該字符串的數字,因爲它包含文本 –

+1

如果只有兩個字,第一個文本和第二個數字,然後拆分它,並只採取數字。順便說一句,parseFloat是一個JavaScript功能,你不能改變它。 – Shubham

回答

6

您可以先清理字符串,以便在解析數字之前只有數字保留在字符串中。

編輯:現在它更安全,因爲它會接受數字類型而不會爆炸。

var a = "Sometext 330" 
 

 
function safeParseFloat(val) { 
 
    return parseFloat(isNaN(val) ? val.replace(/[^\d\.]+/g, '') : val) 
 
} 
 

 
function superSafeParseFloat(val) { 
 
    if (isNaN(val)) { 
 
    if ((val = val.match(/([0-9\.,]+\d)/g))) { 
 
     val = val[0].replace(/[^\d\.]+/g, '') 
 
    } 
 
    } 
 
    return parseFloat(val) 
 
} 
 

 
console.log(
 
    safeParseFloat(a), 
 
    safeParseFloat(2000.69) 
 
) 
 

 
console.log(
 
    superSafeParseFloat('blah $2,000,000.69 AUD'), 
 
    superSafeParseFloat('blah $8008 USD'), 
 
    superSafeParseFloat('NotANumber'), 
 
    superSafeParseFloat(8008.69), 
 
    superSafeParseFloat('... something 500.5... test') 
 
)

+0

雖然這不適用於像「」... 500.5 ... test「這樣的字符串。 – Annarfych

+0

@Annarfych好點。我用superSafe版本更新了答案。雖然這不是國際安全 – synthet1c

1

您也可以分割字符串太多,如果你的使用情況始終是相同的。

var str = "test 900"; 
 
var split = str.split(' '); 
 
// Loop through the split array 
 
split.forEach(function(item){ 
 
    // If the split is not NaN 
 
    if(!isNaN(item)){ 
 
    // Heres your number 
 
    console.log(item); 
 
    } 
 
});

0

更優雅的方式:

Var a = "Sometext 330" 
return parseFloat(a.match(/\d+$/)[0]);