JavaScript从字符串中提取数字

4

我有一堆使用jQuery从HTML中提取出来的字符串。

它们看起来像这样:

var productBeforePrice = "DKK 399,95";
var productCurrentPrice = "DKK 299,95";

我需要提取数字值以计算价格差异。
(所以我最终得到约≈)
var productPriceDiff = DKK 100";

或者只是:

var productPriceDiff = 100";)

有人可以帮我做这个吗?

谢谢, Jakob


1
你的数字格式总是相似的吗?你可以使用正则表达式来获取数字部分,然后使用该字符串创建一个新的Number()。 - Kekoa
4个回答

10

首先需要将输入的价格从字符串转换为数字。然后相减。最后将结果转换回"DKK ###,##"格式。下面这两个函数会有所帮助。

var priceAsFloat = function (price) {  
   return parseFloat(price.replace(/\./g, '').replace(/,/g,'.').replace(/[^\d\.]/g,''));
}

var formatPrice = function (price) {  
   return 'DKK ' + price.toString().replace(/\./g,',');
}

那么你可以这样做:

var productBeforePrice = "DKK 399,95"; 
var productCurrentPrice = "DKK 299,95";
productPriceDiff = formatPrice(priceAsFloat(productBeforePrice) - priceAsFloat(productCurrentPrice));

刚刚意识到它无法处理像“DKK 1.299,95”这样的更大价格。 - Jakob Madsen
好的,我已经修复了它,现在可以处理更大的价格了,方法是在执行其他操作之前删除所有句点。我没有修复formatPrice函数。它将返回一个有效的价格,但没有句点("DKK 1299,95")。如果你需要帮助,请提出另一个问题。 :-) - Patrick McElhaney

5

尝试:

var productCurrentPrice = productBeforePrice.replace(/[^\d.,]+/,'');

编辑:这将得到包括数字、逗号和句点在内的价格。它并不验证数字格式是否正确或数字、句点等是否连续。如果您能更精确地定义所期望的确切数字,那会很有帮助。


1
很确定你实际上需要转义那个句号。 - brettkelly
1
很确定你没有。它在 [] 中。如果在外面,就需要转义。我刚在 Firefox 中测试了一下,工作正常。 - Jonathan Fingland

2

也可以尝试:

var productCurrentPrice = productBeforePrice.match(/\d+(,\d+)?/)[0];

1
var productCurrentPrice = parseInt(productBeforePrice.replace(/[^\d\.]+/,''));

如果我理解你的问题正确,那么这应该使productCurrentPrice成为你实际需要的数字。


1
在他提供的丹麦克朗数字格式示例中,逗号出现错误。 - Jonathan Fingland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接