输入文本上的 Javascript 文本输入将格式更改为小数点后两位



嗨,我有以下代码可以清理输入文本中输入的文本。

let formattedText = text
.replace(/[^0-9.]/g, "") // remove chars except number, point.
.replace(/(..*)./g, "$1") // remove multiple points.
.replace(/^0+(d)/gm, "$1"); // remove multiple leading zeros.

我陷入了想限制为小数点后两位而不使用 toFixed(2( 的情况

例如,用户应输入 100.203

您可以将第二个正则表达式更改为此

.replace(/(.d{1,2}).*/g, "$1") // remove multiple points.

(.d{1,2}).*/
  • (.d{1,2})- 匹配.后跟 1 或 2 位数字
  • .*- 匹配除换行零或更多时间以外的任何内容

let formattedText = (text) => text
.replace(/[^0-9.]/g, "")
.replace(/.{2,}/g,'.')
.replace(/^0*([^0]d*.d{1,2}).*/g, "$1")


console.log(formattedText('abcb123.25252.235252abdbch'))
console.log(formattedText('abcb123.2.2gvsgvs'))
console.log(formattedText('abcbcbbc123'))
console.log(formattedText('123.avsvs.123'))
console.log(formattedText('avsvs.1234'))
console.log(formattedText('avsvs1234'))


.replace(/.{2,}/g,'.')

如果有的话,这将替换连续的.句点,即abc123.aba.123第一次替换字符串后将变得123..123,因此要使其成为有效数字,我们需要用单个.替换..


.replace(/^0*([^0]d*.d{1,2}).*/g, "$1")

这只是结合了您的正则表达式,用于删除前导 0 和多个小数,这个正则表达式意味着

  • ^0*- 在字符串开头匹配0零个或多个时间
  • ([^0]d*.d{1,2})- 匹配非零数字,后跟任意数量的数字,后跟.后跟一位或两位数字
  • .*- 匹配除换行符以外的任何内容

尝试。

.replace(/(.d{3})d+/g, '$1');

最新更新