嗨,我有以下代码可以清理输入文本中输入的文本。
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');