正则表达式使非十进制数十进制(添加.00)

时间:2016-05-10 14:46:53

标签: javascript regex

我有一个用户输入,用户可以在其中编辑某些内容的价格。为了保持数据的一致性,我想在前端站点上使用该字符串进行操作。

我想做的是:

1234 to 1234.00
12.3 to 12.30
12,3 to 12.30
1234.45 to 1234.45

基本上,

  1. 用点替换逗号 这应该很容易完成,例如:

    str.replace(',', '.');
    
  2. 如果不是十进制数,则添加点数,并且总是更改两位数(如果需要,请添加0) 我尝试做类似的事情:

    priceByUser = priceByUser.replace(/^\d*\.?\d*$/, "$1\.00");
    
  3. 不幸的是,这实际上并没有像我预期的那样工作。

    是否有人可以帮助我解决这个问题? 感谢

1 个答案:

答案 0 :(得分:4)

您可以考虑使用正则表达式将逗号和句点替换为只有小数点,然后通过parseFloat()将值解析为浮点数,最后使用toFixed(2)函数指示您需要两个小数位:

// This will clean up your input (consolidating periods and commas), parse the result
// as a floating point number and then format that number to two decimal places
priceByUser = parseFloat(priceByUser.replace(/,/g,'.')).toFixed(2);

如果你想要一个额外的验证级别,你可以考虑在发生这种情况后去掉任何非数字或小数位:

// Sanitize
priceByUser = priceByUser.replace(/,/g,'.').replace(/[^\d\.]/g,'');
// Parse and format
priceByUser = Number(priceByUser).toFixed(2);

示例

您可以see a working example here以及下面的输入/输出示例:

enter image description here