从表示货币值的字符串中提取整数

时间:2016-06-15 14:59:40

标签: javascript jquery

我有一个字符串流,表示我需要提取整数的货币值。

这些字符串可能包含也可能没有“$”,“€”,“ - ”,空格“等字符。”和“,”可以交替分隔小数和数字组。 这些是字符串的示例以及我需要从中提取的值示例:

"1,423,433.00" = 1423433
"1.355,22€" = 1355
" CAD$764.35" = 764
"$734242" = 734242
"$ 234.234,55" = 234234
"545,767$" = 545767
"765 778 00" = 765778
"765.823,888" = 765.823

我尝试使用

.replace(/[^\d]/g, '');

但“$ 234.234,55”的结果是23423455,我需要234234没有小数。我想我需要先处理小数。

我也有小数用“,”或“。”分隔的情况。并且可以有3位数,例如:“1.365.823,803”或“12244.222”。

在我有“123.444”的情况下,是什么让我知道“。”不是小数,是数字永远不会低于10000。

如何实现提取这些数字的功能?

编辑:

我认为第一步是删除除“,”或“。”之外的所有字符。

然后,我们可以找到小数符号,从左边找第一个符号。

如果是2位数之后,我们知道它的小数符号。

如果是3位数之后,我们会查找下一个符号,看它是否不同。

如果它与第一个相同则不是小数符号。

如果不同,则第一个是十进制。

如果没有其他符号,我们知道第一个是十进制的,因为所有数字都优于1000,所以如果我们有1233.444,我们就知道“。”是小数符号。

3 个答案:

答案 0 :(得分:1)

如果你想摆脱数字的小数部分,你肯定会在点符号之后出现,你可以使用下一组步骤来删除小数部分并只得到值。

' CAD$764.35'.split('.')[0].replace(/[^\d]/g, ''); // 764

在我看来,更好的方法是使用replace和正则表达式从字符串中删除所有非数字/点字符,将字符串解析为数字。

要支持您拥有的所有案例,首先必须分析字符串并验证正在使用哪个分隔符号并相应地调整正则表达式。当您使用parseInt将字符串粗略化为数字时,如果小数点分隔符号为,.,则无需关心。

parseInt('3452,90') // 3452
parseInt('3452.90') // 3452

但是你必须从字符串中删除其他分隔符号,否则当你试图解析它们时会产生错误。

parseInt('3,452.90') // 3

答案 1 :(得分:1)

如果我是你,我不会试图重新发明轮子。我建议你一个名为数字js的js库,它可以处理不同货币和十进制格式的问题。

例如:

 numeral("$ 234.234,55")

会输出:

 234.23455

Check it out for more examples

答案 2 :(得分:1)

你可以简单地使用这个

$(document).ready(function(){
    myString = "CAD$764.35";
    myString = myString.replace ( /[^\d.]/g, '' );
    alert(myString);

});

DEMO