JavaScript将货币分为数字值和货币符号/名称

时间:2017-09-25 08:11:29

标签: javascript jquery angularjs angularjs-directive

我从网络服务获取货币值,我希望在数字输入(浮动部分)中显示货币值,并在输入旁边的简单标签上显示货币符号/名称。

我从网络服务获得的数据示例:

  

$ 1.200,05

     

R $ 1200.05

     

KR。 1,200.05

     

37,200.05 kr。

     

$ 300

     

500.0€

您可以看到数据非常复杂。

符号/货币名称可以在数字值之前或之后,它可以在符号和数字之间有空格,或者根本没有空格。它还可以在货币名称中包含,我仍然希望保留(例如丹麦克朗: kr。

小数点可以是“”或“”,也可以是任意数量的小数。 与千位分隔符相同:它可以是'。'或者','

我有以下代码片段来获取数字值,但我无法获取货币字符串部分:

if (!isNaN(cost.charAt(0))) { //check whether it starts with number or string, to adjust the regex
    var regex = /([+-]?[0-9|^.|^,]+)[\.|,]([0-9])/
    var result = regex.exec(cost);
    var floatResult = result? result[1].replace(/[.,]/g, "")+ "." + result[2] : cost.replace(/[^0-9-+]/g, "");
    return floatResult;
}
else {
    var regex = /([+-]?[0-9|^.|^,]+)[\.|,]([0-9]+)$/igm
    var result = regex.exec(cost);
    var floatResult = result? result[1].replace(/[.,]/g, "")+ "." + result[2] : cost.replace(/[^0-9-+]/g, "");
    return floatResult;
}   

我在我的webapp中使用jQuery和AngularJS,所以如果在其中一个方法的帮助下有一个更简单的方法,那就太好了。

1 个答案:

答案 0 :(得分:0)

我不确定如何使用正则表达式执行此操作,但如果没有正则表达式,我可以做的是:

a)记录第一个 numeric character

的索引

b)记录最后数字字符

的索引

c)从第一个到最后一个数字字符中取出子字符串并将其转换为数字Number(numerics)(您必须在此步骤中删除数字之间的逗号)

d)如果第一个数字字符索引为0,则货币符号/名称将位于字符串的末尾,之后最后一个数字字符

e)否则它将位于字符串的前面,之前第一个数字字符。

修改

如果您可以确定作为回复始终的回复内容包含一个分隔值和货币符号的空格,您可以简化整个过程。如果这是真的(就像在你的例子中那样),你可以使用string.split(' ')来获取两个字符串的数组,并检查哪一个是数字。