Javascript - 清理用户输入的货币值

标签 javascript parsing numbers

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

我需要大十进制值,但用户的输入字段是标准文本输入。 我正在尝试格式化字符串,但是,我找不到一种方法来干净地处理用户通常插入的所有变体。

我试过这个:

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

有没有一种方法可以格式化字符串,以便在用户输入一个或多个逗号或点作为小数分隔符时它也可以工作?

最佳答案

试试这个。

function parse(str){
  if(str.includes('.') && str.includes(',')){
    str = str.split(/[.,]/)
    let last = str.lastIndexOf('.') || str.lastIndexOf(',');
    return parseFloat(str.slice(0,last).join('').replace(/[.,]/g,'') + '.' + str.slice(last)) 
  }
  else return str.replace(',','.');
}
console.log(parse('1.000,1'))
console.log(parse('1,000.1'))
console.log(parse('1,0000'))

关于Javascript - 清理用户输入的货币值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54786649/

相关文章:

php - XML 解析 - 缺少节点

javascript - 没有从我的对象变量中获得正确的输入

javascript - Vue.js 2 : Delete property from data object

javascript - 用 "$$$"替换文本,在 Javascript 中给出 chop 的结果

android - 解析推送通知不从 Android 发送到 channel

ios - 在 iOS 中解析 XML?

c# - 如何在多线程应用程序中正确使用随机类

javascript 和 c++ 双数 0.0

javascript - javascript中符号传播右移和零填充右移之间的区别?

javascript - Webpack 和 React -- 意外的标记