html部分:
<el-input v-model="number" @input="hanldeInuptRules"></el-input>
script:
const hanldeInuptRules = () => {
number.value = number.value.replace(/[^\d.]/g, '').replace(/^0+(\d)/, '$1').replace(/^\./, '0.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^\./g, '');
}
解释:
让我们逐步解释这段代码的每个步骤:
-
number.value.replace(/[^\d.]/g, '')
: 这一步使用正则表达式/[^\d.]/g
,将number.value
中除了数字和小数点以外的字符都替换为空字符串,即去除非数字和小数点的字符。 -
.replace(/^0+(\d)/, '$1')
: 这一步使用正则表达式/^0+(\d)/
,将number.value
中以零开头的数字去除多余的零,只保留一个零作为整数的起始。 -
.replace(/^\./, '0.')
: 这一步使用正则表达式/^\./
,将number.value
中以小数点开头的情况,添加一个前置的零,确保小数点前有数字。 -
.replace('.', '$#$')
: 这一步将小数点先替换为特殊字符串'$#$'
。 -
.replace(/\./g, '')
: 这一步使用正则表达式/\.g/
,将number.value
中所有的小数点去除,以避免多个小数点的情况。 -
.replace('$#$', '.')
: 这一步将之前替换为特殊字符串的小数点还原回为正常的小数点。 -
.replace(/^\./, '')
: 这一步使用正则表达式/^\./
,将number.value
中以小数点开头的情况去除小数点,确保小数点前有数字。
综合上述步骤,确保其是一个合法的数字或小数。例如,对于输入 0012.345.6
,经过这段代码处理后,将会变为 12.3456
。