首页 > 解决方案 > Javascript - 干净的用户输入的货币价值

问题描述

如何正确清理用户输入的货币值?

我需要该值作为 Big Decimal,但用户的输入字段是标准文本输入。我正在尝试格式化字符串,但是,对于用户通常插入的所有变体,我找不到一种干净利落的方法。

我试过这个:

parseFloat(amount.replace(',', '.')

这适用于以下情况:

1000 -> 1000
1000.1 -> 1000.1
1000,1 -> 1000.1

但是,我有以下两种情况目前不起作用:

1,000.1 -> gives: 1.1 / should be: 1000.1
1.000,1 -> gives 1.1 / should be: 1000.1

有没有办法格式化字符串,如果用户输入一个或多个逗号或点作为十进制分隔符,它也可以工作?

标签: javascriptparsingnumbers

解决方案


据我所知,代码需要区分小数分隔符和千位分隔符。只能有一个小数分隔符,通常是最后一个“.”。或输入中的“,”。您只能将字符串中的最后一个 ',' 替换为 '.' 并删除所有其余的“,”和“。” 从输入。这适用于您提供的测试用例,但如果用户输入类似 100,001 的内容,并且“,”用作千位分隔符,代码仍然会失败。我认为最好的方法是使用某种类型的输入掩码或表示正确输入值类型的帮助段落。


推荐阅读