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

Posted

技术标签:

【中文标题】JavaScript 将货币分为数值和货币符号/名称【英文标题】:JavaScript separate currency into number value and currency symbol/name 【发布时间】:2018-03-06 03:21:29 【问题描述】:

我从 Web 服务获取货币值,我想在数字输入(浮点部分)中显示它,它是输入旁边的简单标签上的货币符号/名称。

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

$ 1.200,05

1200.05 雷亚尔

kr。 1,200.05

37,200.05 克朗

300 美元

500.0 欧元

可以看到数据非常混杂。

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

小数点可以是 '.' 或 ',',并且可以跟任意位数的小数。 与 千位分隔符 相同:它可以是 '.'或','

我有以下 sn-p 来获取数字值,但是我在获取货币字符串部分时遇到了问题:

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;
   

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

【问题讨论】:

【参考方案1】:

我不确定如何使用正则表达式来做到这一点,但如果没有正则表达式我可能会做的是:

a) 记录firstnumeric character的索引

b) 记录最后一个数字字符的索引

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

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

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


编辑

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

【讨论】:

以上是关于JavaScript 将货币分为数值和货币符号/名称的主要内容,如果未能解决你的问题,请参考以下文章

将 JavaScript 数字转换为货币格式,但没有“$”或任何货币符号 [重复]

number数值转化成为货币格式

Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)

使用美元符号和逗号格式化货币输入字段

AngularJS 内置过滤器

将货币符号动态组合到 TextField 文本