我有这个用户价格输入,我想允许0、1或2个十进制数字。
问题:
如果用户输入第三个十进制数字,我想替换输入。
类似的东西:
5
没关系5,
可以,因为它正在等待小数位5,5
没关系5,55
没关系5,555
这不行,我想删除最后一位并返回到5,55
5,555555555555
也不行,用户可能会粘贴一些带有多余小数位的内容,我想将它们的大小最多缩减为2个小数,然后再返回到5,55
我该怎么做?
我知道如何匹配字符串的结尾:/[,\d+]$/
但是我怎么用逗号后的前两位代替?
答案 0 :(得分:4)
您的模式[,\d+]$
将用逗号匹配数字或加号并声明字符串的结尾。
您可以捕获一组1个以上的数字,一个可选的逗号和0-2个数字。然后再匹配0+个数字并替换为组1。
^(\d+,?\d{0,2})\d*$
说明
^
开始strig (
捕获组1
\d+
1个以上数字,?
可选逗号\d{0,2}
0-2位数字)
关闭群组\d*
匹配0+个数字$
声明字符串结尾如果要将零件保留在小数点前,可以使用捕获组^(\d+),?\d{0,2}$
并替换为第一个捕获组:
[
"5",
"5",
"5,0",
"5,00",
"5,000"
].forEach(s => console.log(s.replace(/^(\d+,?\d{0,2})\d*$/, "$1")));
答案 1 :(得分:2)
您总是可以暂时将逗号转换为句点,解析浮点数并将其固定为2位小数,然后再次用逗号替换句点,如下所示;
let str = '1,567895'; // price value
let val = parseFloat(str.replace(',', '.')).toFixed(2).replace('.', ',');
console.log(val);