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

IT技术 javascript string
2021-02-05 16:48:16

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

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

//desired output is 1238

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

6个回答

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

myString = myString.replace(/\D/g,'');
谢谢 csj; 任何地方都可以找到更多信息\D
2021-03-14 16:48:16
确实replace,在所有的浏览器这个确切的语法的工作?似乎我记得object has no method 'replace' 在旧版本的 IE 中使用它时使用我用 jQuery 抓取的文本......或类似的东西。
2021-03-19 16:48:16
为了清楚起见,这里是替换的语法:w3schools.com/jsref/jsref_obj_regexp.asp因为正斜杠和“g”是该命令的一部分,而不是 RegEx 的一部分。
2021-03-22 16:48:16
这是我的默认正则表达式参考:regular-expressions.info/reference.html 每个内置字符类都有内置补码。\d \D(数字与除数字以外的所有内容) \w \W(单词字符与除单词字符以外的所有内容) \s \S(空白与除空白以外的所有内容)
2021-03-25 16:48:16
@cwd 我不知道过去或当前的浏览器支持什么。该问题指定了非 DOM 上下文,因此发布者很可能是在非 Web 浏览器环境中编写脚本。
2021-03-27 16:48:16

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

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"
不好:"aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.应该去除可能围绕数字的任何字符串。
2021-03-20 16:48:16
你是什​​么意思?给出输入和输出的例子
2021-03-25 16:48:16
@max4ever 你救了我的命,感谢您处理-(负)数字案例:)
2021-03-27 16:48:16
任何正则表达式专家?如何使它只允许一个点(与数字非常相关)。谢谢!
2021-03-31 16:48:16
@Kasperi 也许: parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
2021-03-31 16:48:16

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

myString.replace(/[^0-9]/g, '');
不适用于浮点/十进制值,例如,“7.6$”将返回 76
2021-03-11 16:48:16
就像提到的@SikandarTariq 一样,但也有负值。
2021-04-03 16:48:16
2021-04-04 16:48:16
出于某种原因,这种方式似乎比 [^\d] 更具可读性。
2021-04-09 16:48:16
正则表达式分隔符后的 g 是什么?
2021-04-10 16:48:16

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

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

类似的东西:

yourString = yourString.replace ( /[^0-9]/g, '' );
不完全是原始问题的答案,而是处理小数点的版本: yourString = yourString.replace ( /[^0-9.]/g, '' );
2021-03-26 16:48:16