为了使这个函数能够处理小数点输入,我们需要调整验证逻辑。我们可以允许用户输入数字和小数点,但要确保输入符合以下规则:
- 只允许数字和最多一个小数点。
- 小数点不能出现在数字的开头。
- 小数点只能出现一次。
- 如果输入的是非数字和非小数点字符,则删除最后一个字符。
根据这些规则,下面是修改后的代码:
handleInput(value) {
// 只允许输入数字和一个小数点
if (!/^\d*\.?\d*$/.test(value)) {
this.formData.totalAmount = value.slice(0, -1) // 如果输入的是非数字或多个小数点,删除最后一个字符
return
}
// 当输入两位数字时,首位不能为 0
if (value.length === 2 && value[0] === '0' && value[1] !== '.') {
this.formData.totalAmount = value.slice(1) // 去掉首位的0
}
// 防止输入多个小数点
const dotCount = (value.match(/\./g) || []).length
if (dotCount > 1) {
this.formData.totalAmount = value.slice(0, -1) // 如果输入多个小数点,删除最后一个字符
}
}
解释:
-
正则表达式
/^\d*\.?\d*$/:\d*:匹配数字(可以是零个或多个)。\.?:允许有一个小数点(可以没有或最多一个)。\d*:小数点后面可以是零个或多个数字。
-
去掉首位的0:
- 通过
value.length === 2 && value[0] === '0' && value[1] !== '.'来确保只有在首位是0且第二位不是小数点时,才去掉首位的0。
- 通过
-
限制小数点数量:
- 使用
const dotCount = (value.match(/\./g) || []).length来检查输入中小数点的数量。如果数量超过1,则删除最后一个字符。
- 使用
示例:
- 输入
0123会变成123。 - 输入
1.23会保持不变。 - 输入
123.45.67会删除最后一个小数点后的部分,变为123.45。
这个修改可以确保你能够正确地输入数字和小数点,并且避免不合法的输入。
6672

被折叠的 条评论
为什么被折叠?



