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

在JavaScript中从字符串中删除所有非数字字符,javascript,string,Javascript,String,考虑一个非DOM场景,您希望使用JavaScript/ECMAScript从字符串中删除所有非数字字符。应保留范围0-9内的所有字符 var myString = 'abc123.8<blah>'; //desired output is 1238 var myString='abc123.8'; //期望输出为1238 如何在纯JavaScript中实现这一点?请记住,这是一个非DOM场景,因此jQuery和其他涉及浏览器和按键事件的解决方案不适用。大致如下: yourStr

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

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

//desired output is 1238
var myString='abc123.8';
//期望输出为1238

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

大致如下:

yourString = yourString.replace ( /[^0-9]/g, '' );
可以使用RegExp对所有非数字字符执行以下操作:

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

如果脚本实现支持正则表达式,请使用正则表达式。比如:

myString.replace(/[^0-9]/g, '');
将字符串的方法与正则表达式
\D
一起使用,这是一个与所有非数字匹配的速记字符类:

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

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

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

我们在2017现在您也可以使用ES2016

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

var myString='abc123.8'

console.log(myString.match(/\d/g.join`)在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>

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

我想从
$123232122.11
(1232332122.11)或
USD123122.892
(123122.892)或
₹ 98,79112.50
(9879112.5)为我提供一个数字输出,包括十进制指针

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

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

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

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


log(parseNum(str))谢谢csj;任何地方都可以找到有关
\D
的更多信息?这是我的默认正则表达式参考:内置字符类都有内置补码\d\d(数字与除数字以外的所有字符相比)\w\w(单词字符与除单词字符以外的所有字符相比)\s\s(空格与除空格以外的所有字符相比)为了清楚起见,这里是replace的语法:因为正斜杠和“g”是该命令的一部分,不是正则表达式的一部分。
replace
在所有浏览器中都能使用这种精确的语法吗?似乎我记得在旧版本的IE中,当我使用jQuery抓取的文本时,得到一个
对象没有方法“替换”
。。。或者类似的东西。@cwd我不知道过去或现在的浏览器支持什么。该问题指定了非DOM上下文,因此海报可能是在非web浏览器环境中编写的。出于某种原因,这种方式似乎比[^\d]更具可读性。在正则表达式分隔符之后,g的用途是什么???@NativeCoder将不适用于浮点/十进制值,例如,“7.6$”将返回任何正则表达式专家?如何使其仅允许一个点(与数字非常相关)。谢谢什么意思?给出输入和输出示例不好:
“bbb的aaa 2.9px。”。替换(/[^\d.-]/g.)
→ <代码>2.9。
应该去掉任何可能围绕数字的字符串。@max4无论你救了我的命,谢谢你处理
-
(否定)数字格:)@Kasperi也许:
parseFloat(“-1234.5.50欧元”)。替换(/[^\d.-]/g')
不完全是对原始问题的回答,但是处理小数点的版本是:
yourString=yourString.replace(/[^0-9.]/g,”)
这是执行此操作的一种非常低效的方法。这里有什么低效或不好的地方?它通过一个备用方法将字符串转换为单个字符串的数组,然后对每个数组项应用JavaScript上的筛选函数,返回一个新的字符串数组,最后将该数组连接回字符串。正则表达式接受一个字符串并返回一个字符串,处理过程通过本机代码完成。对我来说,这比接受的答案要好,因为它保留了十进制。您可能还需要添加“-”,因为数字也可以是负数。
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>
str = str.match(/\d|\./g).join('');