考虑一个非dom场景,您希望使用JavaScript/ECMAScript从字符串中删除所有非数字字符。应该保留0 - 9范围内的任何字符。

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

//desired output is 1238

如何在纯JavaScript中实现这一点?请记住,这是一个非dom场景,因此jQuery和其他涉及浏览器和按键事件的解决方案并不适用。


当前回答

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

其他回答

将字符串的.replace方法使用\D的正则表达式,这是一个匹配所有非数字的简写字符类:

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

删除所有非数字字符但保留小数(并返回数字)的简短函数:

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

如果你需要这个为浮点数留下圆点,使用这个

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

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

我们现在是2017年,你也可以使用ES2016

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

or

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

结果是

1238