如何使用spilled来解析和删除多个货币符号

时间:2017-01-18 20:08:05

标签: jquery string jquery-ui split currency

我有一个要求,我需要比较两个包含总金额的字段。

其中一个字段代表$1000(货币符号后跟金额。例如,对于美国$100,对于英国€100)。

我需要解析可能来自不同国家/地区的金额的字段。我怎么能用JQuery做到这一点?

以下是我目前使用的jQuery:

var Amt= parseFloat(total.split('$'));

2 个答案:

答案 0 :(得分:1)

split函数可以采用正则表达式。由于$符号是特殊字符,因此必须使用反斜杠进行转义。对于另一种货币符号,我们使用|符号来表示OR。

split函数将返回一个数组,由于我们在货币符号上拆分,因此该符号将转换为空字符串""。在这种情况下,filter只会显示带有真值的字符串。

我不确定你到底在寻找什么,但我制作了一段我觉得有用的片段。

var euroTotal  = document.getElementById("euro-cost");
var usTotal    = document.getElementById("us-cost");
var peruTotal  = document.getElementById("peru-cost");
var euroResult = document.getElementById("euro-result");
var usResult   = document.getElementById("us-result");
var peruResult = document.getElementById("peru-result");

// Create a regex with currency symbols. Separate symbols with |
var moneyRegex = /[A-Z]{0,2}\$|€|¥|₩|£|CHF|¢|฿|L|Q|₭|₮|₨|₱|Kč|Ft|Rp|лв|RM|MT|₦|Gs|zł|lei|S\/\./;

euroResult.innerHTML = `Parsed, ${euroTotal.innerHTML} equals: ` +
                     parseFloat(euroTotal.innerHTML.split(moneyRegex).filter(Boolean));

usResult.innerHTML = `Parsed, ${usTotal.innerHTML} equals: ` + 
                     parseFloat(usTotal.innerHTML.split(moneyRegex).filter(Boolean));

peruResult.innerHTML = `Parsed, ${peruTotal.innerHTML} equals: ` + 
parseFloat(peruTotal.innerHTML.split(moneyRegex).filter(Boolean));
<h3>Item Costs</h3>

<p>This item costs <span id="euro-cost">€400</span></p>
<p>This item costs <span id="us-cost">$300</span></p>
<p>This item costs <span id="peru-cost">S/.200</span></p>

<h3>Parsing Currency Values</h3>

<p id="euro-result"></p>
<p id="us-result"></p>
<p id="peru-result"></p>

<p><strong>Feel free to play around with different currencies</strong></p>

您可以使用其他一些货币符号,此功能应将其删除

答案 1 :(得分:0)

我认为split是最好的方法。我会使用matchexec。抄袭和修改理查德汉密尔顿的正则表达式:

var match moneyString.match(/([A-Z]{0,2}\$|CHF|[€¥₩£¢฿LQ₭₮₨₱₦]|Kč|Ft|Rp|лв|RM|MT|Gs|zł|lei|S\/\.)(.*)/);
if (! match) {
    // handle error
} else {
    var currency = match[1];
    var amt = parseFloat(match[2]);
}

修改此方法以进行更严格的语法检查,在货币符号前允许-,在小数点后限制为2位数,检查货币符号是否正确,确保您匹配整个字符串等