如果字符串包含超过 2 位小数,则用于替换字符串的正则表达式

RegEx for replacing a string if it contains more than 2 decimals

我有这个用户价格输入,我想允许 0、1 或 2 个小数位。

问题:

如果用户输入第三位小数,我想替换输入。

类似于:

我该怎么做?

我知道如何匹配字符串的结尾:/[,\d+]$/

但是如何替换逗号后的前两位数呢?

您的模式 [,\d+]$ 将匹配逗号、数字或加号并断言字符串的结尾。

您可以在一组中捕获 1+ 个数字、一个可选的逗号和 0-2 个数字。之后匹配0+个数字并替换为第1组。

^(\d+,?\d{0,2})\d*$

说明

  • ^ 字符串开始
  • ( 捕获组 1
    • \d+ 1+ 位数
    • ,? 可选逗号
    • \d{0,2} 0 - 2 位数
  • ) 关闭群组
  • \d* 匹配 0+ 个数字
  • $ 断言字符串结束

Regex demo

如果要保留小数点前的部分,可以使用捕获组^(\d+),?\d{0,2}$并替换为第一个捕获组:

[
  "5",
  "5",
  "5,0",
  "5,00",
  "5,000"
].forEach(s => console.log(s.replace(/^(\d+,?\d{0,2})\d*$/, "")));

您总是可以暂时将逗号转换为句点,解析浮点数并将其固定为 2 位小数,然后再次将句点替换为逗号,如下所示;

let str = '1,567895'; // price value

let val = parseFloat(str.replace(',', '.')).toFixed(2).replace('.', ',');
console.log(val);