2009-12-07 131 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

相关问题