我有一个要求,我需要比较两个包含总金额的字段。
其中一个字段代表$1000
(货币符号后跟金额。例如,对于美国$100
,对于英国€100
)。
我需要解析可能来自不同国家/地区的金额的字段。我怎么能用JQuery做到这一点?
以下是我目前使用的jQuery:
var Amt= parseFloat(total.split('$'));
答案 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
是最好的方法。我会使用match
或exec
。抄袭和修改理查德汉密尔顿的正则表达式:
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位数,检查货币符号是否正确,确保您匹配整个字符串等