Javascript从字符串中获取数字?

时间:2012-01-18 21:59:23

标签: javascript

我有一个包含价格字符串的数组,有时会被字符包围。

如何从中转换它?

[0] > '$9.99/aa'
[1] > '$2.99'
[2] > '$1.'

为:

[0] > '9.99'
[1] > '2.99'
[2] > '1'

所以我可以与价值观进行比较?我只需要知道如何更改一个,我可以轻松地将它应用到数组

6 个答案:

答案 0 :(得分:2)

+myString.replace(/[^\d.ex-]+/gi, '')

删除所有不能出现在JavaScript编号中的字符,然后将+运算符应用于它以将其转换为数字。如果您没有十六进制格式或指数格式的数字,那么您可以不使用ex

编辑:

要处理区域设置,并以更加量身定制的方式处理数字,我会执行以下操作

// Get rid of myriad separators and normalize the fraction separator.
if ((0.5).toLocaleString().indexOf(',') >= 0) {
  myString = myString.replace(/\./g, '').replace(/,/g, '.');
} else {
  myString = myString.replace(/,/g, '');
}

var numericValue = +(myString.match(
    // Matches JavaScript number literals excluding octal.
    /[+-]?(?:(?:(?:0|[1-9]\d*)(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|0x[0-9a-f]+)/i)
    // Will produce NaN if there's no match.
    || NaN);

答案 1 :(得分:2)

您的案例需要正则表达式,因为当字符串以非数字/点为前缀时,所有本机数字转换方法都会失败。

var string = '$1.22'; //Example
string = string.replace(/[^0-9.]+/g, '');
// string = '1.22'

如果您想将此字符串转换为数字,之后您可以使用parseInt+1*

有关这些数字转换方法的比较,请参阅this answer

答案 2 :(得分:1)

当你需要小数时,

parseFloat()适用于这种情况。正则表达式将为0索引中的所有案例提供匹配的数字。示例代码如下。

var one = "2.99";
var two = '$1.';
var three = '$3tees';
var four = '$44.10'    

var regex = /\d+\.?(\d+)?/;
var num = parseFloat(one.match(regex)[0]);

答案 3 :(得分:1)

在第一个数字前删除所有内容并将parseFloat应用于其余数字:

s = "$9.99/aa"
alert(parseFloat(s.replace(/^\D*/, '')))

答案 4 :(得分:0)

懒惰的方式:

+string;

正确的方法:

parseInt(string, 10);

因此:

for (var i = 0; i < arr.length; i++) {
    var match = /\$(\d*)\.(\d\d)/.exec(arr[i]);
    arr[i] = parseInt(match[1] + match[2]);
}

编辑:哦,你想要的东西超过10美元。

另一个编辑:显然parseInt(至少在我的浏览器中)忽略尾随字符。在那种情况下,我原来的实现会起作用。

for (var i = 0; i < arr.length; i++) {
    arr[i] = parseInt(arr[i].substring(1));
}

答案 5 :(得分:0)

+/[\d\.]+/.exec('$9.99/aa')[0]

查找第一组数字和句点,将它们转换为浮点数