2009-12-07 71 views
442

考慮一個非DOM方案,您希望使用JavaScript/ECMAScript從字符串中刪除所有非數字字符。應保留範圍爲0 - 9的任何字符。在JavaScript中刪除字符串中的所有非數字字符

var myString = 'abc123.8<blah>'; 

//desired output is 1238 

如何在普通的JavaScript中實現這一點?請記住,這是一個非DOM場景,所以jQuery和涉及瀏覽器和按鍵事件的其他解決方案並不適合。

回答

896

使用字符串的.replace法的\D一個正則表達式,這是一個速記字符類匹配所有的非數字:如果你需要這個離開點爲

myString = myString.replace(/\D/g,''); 
+2

謝謝csj;任何地方找到'\ D'的更多信息? – 2009-12-07 19:55:35

+21

這是我的默認正則表達式引用:http://www.regular-expressions.info/reference.html 內置的字符類都有內置的補充。 \ d \ D \ w \ W(word字符與一切除了單詞字符) \ s \ S(空格與一切,但空白) – csj 2009-12-07 20:38:22

+3

只需要清楚,這裏是替換:http://www.w3schools.com/jsref/jsref_obj_regexp.asp,因爲正斜槓和「g」是該命令的一部分,而不是RegEx的一部分。 – 2011-02-09 00:17:31

10

東西線沿線的:

yourString = yourString.replace (/[^0-9]/g, ''); 
+2

不完全的答案,原來的問題,而是一個版本來處理小數點:'yourString = yourString。替換(/[^0-9.]/g,'');' – 2016-07-05 17:26:22

19

您可以使用正則表達式來replace所有非數字字符:

var myString = 'abc123.8<blah>'; 
myString = myString.replace(/[^\d]/g, ''); // 1238 
27

使用正則表達式,如果你的腳本實現支持他們。喜歡的東西:

myString.replace(/[^0-9]/g, ''); 
+11

出於某種原因,這種方式似乎比[^ \ d]更可讀。 – 2013-09-29 05:48:57

+1

正則表達式分隔符後的g是多少? – 2017-05-03 19:57:59

+0

不適用於浮點數字:/ – vsync 2017-06-05 12:55:36

247

浮點數,使用此

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50" 
+3

任何正則表達式專家?如何使這隻允許一個點(與數字非常相關)。謝謝! – Kasperi 2014-10-21 14:48:41

+1

你是什麼意思?給出輸入輸出示例 – max4ever 2014-10-23 12:51:54

+0

我的意思是,它目前接受例如「1..56」和「1.5.28」,對吧?是否可以讓它只接受單點的數字,如「1.56」? – Kasperi 2014-10-24 14:19:36

0

我們是在2017年現在你也可以使用ES2016

var a = 'abc123.8<blah>'; 
console.log([...a].filter(e => isFinite(e)).join('')); 

console.log([...'abc123.8<blah>'].filter(e => isFinite(e)).join('')); 

結果是

1238 
+5

這是一個非常低效的方法來進行此操作。 – djheru 2017-08-10 16:02:49

+0

這當然是一種選擇,只是不是一個很好的選擇。 – 2017-12-02 06:42:54

相關問題