考虑一个非 DOM 场景,您希望使用 JavaScript/ECMAScript 从字符串中删除所有非数字字符。应保留 0 - 9
范围内的所有字符。
var myString = 'abc123.8<blah>';
//desired output is 1238
你将如何在纯 JavaScript 中实现这一点?请记住这是一个非 DOM 场景,因此 jQuery 和其他涉及浏览器和按键事件的解决方案不适合。
如果你需要这个来为浮点数留下点,使用这个
var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"
"aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')
→ 2.9.
应该去掉任何可能围绕数字的字符串。
-
(负)数字案例 :)
parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
如果您的脚本实现支持它们,请使用正则表达式。就像是:
myString.replace(/[^0-9]/g, '');
您可以使用正则表达式来 replace 所有非数字字符:
var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238
类似于以下内容:
yourString = yourString.replace ( /[^0-9]/g, '' );
yourString = yourString.replace ( /[^0-9.]/g, '' );
replace(/[^0-9.,-]/g, ''
删除所有非数字字符但保留小数(并返回数字)的短函数:
parseNum = str => +str.replace(/[^.\d]/g, '');让 str = 'a1b2c.d3e';控制台.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
这个,
.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
\D
的更多信息?replace
是否在所有浏览器中都使用这种精确的语法?似乎我记得在旧版本的 IE 中使用它和我用 jQuery 抓取的文本时得到一个object has no method 'replace'
......或类似的东西。