从JavaScript中的字符串中剥离所有非数字字符


700

考虑一个非DOM方案,您要使用JavaScript / ECMAScript从字符串中删除所有非数字字符。范围内的任何字符0 - 9都应保留。

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

//desired output is 1238

您将如何用纯JavaScript实现此目标?请记住,这是一个非DOM方案,因此jQuery和其他涉及浏览器和按键事件的解决方案都不适合。

Answers:


1428

使用.replace正则表达式为的字符串方法\D,这是与所有非数字匹配的速记字符类:

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

5
谢谢csj; 在任何地方可以找到更多信息\D
p.campbell,

34
这是我的默认正则表达式参考:regular-expressions.info/reference.html 每个内置字符类都具有内置补码。\ d \ D(数字除数字外的所有内容)\ w \ W(字符除文字字符外的所有内容)\ s \ S(空格与空白以外的所有内容)
csj

3
为了清楚起见,这里是replace的语法:w3schools.com/jsref/jsref_obj_regexp.asp,因为正斜杠和“ g”是该命令的一部分,而不是RegEx的一部分。
Mike

确实replace,在所有的浏览器这个确切的语法的工作?似乎我记得object has no method 'replace' 在将它与我用jQuery抓取的文本一起使用时使用过IE的旧版本...之类的东西。
cwd

@cwd我不知道过去或当前的浏览器支持什么功能。该问题指定了非DOM上下文,因此发布者很可能是在非Web浏览器环境中编写脚本的。
csj

354

如果您需要用它来保留浮点数,请使用此

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

6
任何正则表达式专家?如何使它只允许一个点(与数字非常相关)。谢谢!
卡斯佩里2014年

1
你什么意思?给出输入和输出示例
max4ever 2014年

2
不好:"aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.应剥去这可能会围绕为数字的字符串..
VSYNC

2
@ max4ever,您救了我的命,感谢您处理-(负)数字案件:)
Pankaj Parkar

4
@Kasperi也许是:parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
A. Genedy


23

您可以使用RegExp 替换所有非数字字符:

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

22

类似于以下内容:

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

10
并非完全是原始问题的答案,而是可以处理小数点的版本:yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

在Angular / Ionic / VueJS中-我只是想出了一种简单的方法:

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

视图上的用法:

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

不幸的是,以上答案对我都不起作用。

我正在寻找从$123,232,122.11(1232332122.11)或USD 123,122.892(123122.892)之类的字符串或诸如₹ 98,79,112.50(9879112.5)之类的任何货币转换货币数字的方法,以便为我提供一个包括小数指针的数字输出。

必须制作我自己的正则表达式,看起来像这样:

str = str.match(/\d|\./g).join('');

0

简短功能,用于删除所有非数字字符,但保留小数点(并返回数字):

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

我们在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

12
这是执行此操作的非常低效的方法。
djheru

什么是效率低下或不好?
弗拉迪斯拉夫·科斯坚科

5
它通过备用方法将字符串转换为单字符字符串数组,然后对每个数组项在JavaScript上应用过滤器功能,返回新的字符串数组,最后将该数组重新组合回字符串。正则表达式接受一个字符串并返回一个字符串,并通过本机代码完成处理。
ShortFuse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.