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

Javascript 从表示货币值的字符串中提取整数,javascript,jquery,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 "

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

这些字符串可能有也可能没有诸如“$”、“€“、“-”、空格“、”等字符,它们可以交替使用小数和数字组。 以下是字符串示例以及我需要从中提取的值示例:

"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.823803”或“12244.222”

在我有“123.444”的情况下,让我知道“.”不代表小数的是数字从不低于10000

如何实现提取这些数字的函数

编辑:

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

然后,我们可以找到十进制符号,从左边寻找第一个符号

如果它在两位数之后,我们知道它是一个十进制符号

如果它在3位之后,我们寻找下一个符号,看看它是否不同

如果与第一个相同,则第一个不是十进制符号

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


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

如果你想去掉数字的小数部分,并且你确定总是在一个点符号之后,你可以使用下一组步骤删除小数部分,只得到值

' CAD$764.35'.split('.')[0].replace(/[^\d]/g, ''); // 764
在我看来,更好的方法是使用replace和regex从字符串中删除所有非数字/点字符,将字符串解析为数字

要支持所有情况,首先必须分析字符串并验证使用的是哪个分隔符号,并相应地调整正则表达式。当您使用
parseInt
将字符串粗化为一个数字时,您不必关心十进制分隔符号是
还是

parseInt('3452,90') // 3452
parseInt('3452.90') // 3452
但必须从字符串中删除其他分隔符号,否则在尝试解析它们时会导致错误

parseInt('3,452.90') // 3

如果你想去掉数字的小数部分,并且你确定总是在一个点符号后面,你可以使用下一组步骤删除小数部分,只得到值

' CAD$764.35'.split('.')[0].replace(/[^\d]/g, ''); // 764
在我看来,更好的方法是使用replace和regex从字符串中删除所有非数字/点字符,将字符串解析为数字

要支持所有情况,首先必须分析字符串并验证使用的是哪个分隔符号,并相应地调整正则表达式。当您使用
parseInt
将字符串粗化为一个数字时,您不必关心十进制分隔符号是
还是

parseInt('3452,90') // 3452
parseInt('3452.90') // 3452
但必须从字符串中删除其他分隔符号,否则在尝试解析它们时会导致错误

parseInt('3,452.90') // 3

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

例如:

 numeral("$ 234.234,55")
将输出:

 234.23455

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

例如:

 numeral("$ 234.234,55")
将输出:

 234.23455

.

您只需使用此

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

});

您只需使用此

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

});

如果数字是十进制的,您从哪里知道?在处理数值之前,您需要标准化您的数字分组。它们都需要使用
进行分组,使用
进行小数,反之亦然。@NinaScholz,小数有2或3位。如果它有两个数字,我马上知道它们是小数。如果他们有3个数字,知道没有一个数字低于10000,我就能知道小数分隔符是什么,例如:12.000333,12000333或12000美元。333@NinaScholz,对不起,我的意思是说“优于10000”,而不是低于10000。你从哪里知道,如果一个数字是十进制的?你需要在处理数值之前标准化你的数字分组。它们都需要使用
进行分组,使用
进行小数,反之亦然。@NinaScholz,小数有2或3位。如果它有两个数字,我马上知道它们是小数。如果他们有3个数字,知道没有一个数字低于10000,我就能知道小数分隔符是什么,例如:12.000333,12000333或12000美元。333@NinaScholz,对不起,我的意思是说“优于10000”,而不是低于10000。戈麦斯,小数符号可以是“,”或“.”,所以我们需要先找到小数符号是什么。我将编辑问题以添加更多信息。请查看。戈麦斯,小数符号可以是“,”或“,”,所以我们需要先找到小数符号是什么。我将编辑问题以添加更多信息。请检查一下。