1

我需要帮助来处理以下情况:我有一些值需要在页面中求和,但这些值的字段是动态创建的(这些字段的 id 也是如此)。

这些值可以以不同的格式显示(取决于货币或小数位),即:20.000,2 雷亚尔(1 个小数位)或 20.000,18 美元(2 个小数位)或 20,000.180 欧元(3 个小数位和英制) .

到目前为止我做了什么:

由于字段是动态创建的,我在该字段的样式中添加了一个 css 类(它们是通过 for each 循环生成的),然后我使用我创建的一个 javascript 原型类将字符串转换为浮点数(如果我通过 R 20.000,02 美元或 20,000.02 雷亚尔,它返回 20000.02)。以下代码在我需要求和的页面中生成的所有字段中进行迭代。

<script>
    var sum = 0;
    jQuery(".countTotalEffectiveMonth").each(function(){
        sum += localeUtils.s2f(jQuery(this).text().replace("R$",""));
        jQuery("#ScenarioCurrentYearSavings").text(sum);

        })
    alert(sum);

</script>

问题:

1:我对货币 ("R$","") 进行了硬编码(将其从字符串中删除并进行计算)。关于我该怎么做的任何想法?我尝试使用正则表达式,但失败了:(。我只能使用此正则表达式 (/[^0-9-]/g) 删除货币,但我不知道如何存储它以便连接它在总和的最后。

更新:

按照 Paul S. 的方法,我这样做了:

var val;
var re = /^([a-z]+)([^\d])([\d.,]+)$/i;
var m;
jQuery(".countTotalEffectiveMonth").each(function(){
    m = jQuery(this).text();
    val = re.exec(m);
    val += val[3].replace(/,/g, '');
    alert(val[1]+val[3]);
    jQuery("#ScenarioCurrentYearSavings").text(val[1]+val[3]);

});

它说 val 为空,但我在执行之前打印了 mval = re.exec(m);并打印了一个类似R$91,67的数字,但我收到 TypeError: val is null。

你能看出有什么问题吗?

4

1 回答 1

1

看起来像这样的正则表达式怎么样

var re = /^([a-z]+)([^\d])([\d.,]+)$/i,
    m;
m = re.exec('US$20.000,18'); // ["US$20.000,18", "US", "$", "20.000,18"]
m = re.exec('R$20,000.02');  // [ "R$20,000.02",  "R", "$", "20,000.02"]

然后m[3]是数值,可以使用更多逻辑将其转换为数字,例如,如果它的形式为x,xxx.xx

var int = +m[3].replace(/,/g, ''); // 20000.02
于 2013-10-04T14:04:56.233 回答