3

正则表达式是您认为您有一个不错的解决方案的领域之一,直到出现您一开始没有考虑的问题。

我正在尝试从字符串中获取价格,如下所示:

US$1234.56
$12
$12.34usd
$0.56
.56 dollars

并将它们转换为:

123456
1200
1234
56
56

分别。这样可以将它们存储Numbers在我的数据库中以用于索引目的,因此我将值存储为美分。

目前我正在使用正则表达式执行此操作:

var justPrice = fullPrice.replace(/[^0-9]/g, "");

这有效,但不考虑前导0,也不适用于制作$12=== 1200(而不仅仅是12,这将是 12 美分)。

我假设在香草正则表达式中无法执行此逻辑,因此在这里使用一些 javascript 就可以了。实现上述结果的最佳方法是什么?

4

2 回答 2

1

我的解决方案是从字符串中获取任何小数位的值,然后将字符串转换为数字并乘以 100。

var stringPrice = fullPrice.replace(/[^0-9\.]/g, "");
var justPrice = Number(stringPrice) * 100;
于 2013-08-05T01:01:29.103 回答
0

也许我在这里遗漏了一些东西,但我认为在这种情况下,使用 RegEx 可能不是最好的主意。你可以尝试这样的事情:

var priceParts = fullPrice.split('.'), justPrice = 0;
if (priceParts.length > 1) {
    if (priceParts[0] !== '' && priceParts[1] !== '') {
        justPrice = priceParts[0].replace(/\D/, '') * 100
                    + priceParts[1].replace(/\D/, '');
    } else if (priceParts[0] !== '') {
        justPrice = priceParts[0].replace(/\D/, '') * 100;
    } else if (priceParts[1] !== '') {
        justPrice = priceParts[1].replace(/\D/, '');
    }
} else {
    justPrice = priceParts[0].replace(/\D/, '') * 100;
}
于 2013-08-05T01:05:39.653 回答