繁体   English   中英

从 JavaScript 中的字符串中去除所有非数字字符

[英]Strip all non-numeric characters from string in JavaScript

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

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

//desired output is 1238

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

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

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

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

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

如果您的脚本实现支持它们,请使用正则表达式。 就像是:

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

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

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

类似于以下内容:

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

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

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

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

不幸的是,以上答案都不适合我。

我希望从$123,232,122.11 (1232332122.11) 或USD 123,122.892 (123122.892) 等字符串或₹ 98,79,112.50 (9879112.5) 之类的任何货币转换货币数字,以给我一个数字输出,包括十进制指针。

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

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

尝试

myString.match(/\d/g).join``

 var myString = 'abc123.8<blah>' console.log( myString.match(/\d/g).join`` );

这个,

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

处理,. 还有-

例子:

"Balance -$100,00.50".match(/\d|\.|\-/g).join('');

输出

10000.50

上面这些答案的问题在于它假设整数。 但是如果你需要一个浮点值,那么前面的 reg 字符串会去掉小数点。

要更正此问题,您需要使用 ^ 编写一个否定字符类

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM