Vue el-input 校验输入数字和小数点,首位数字不能为0

为了使这个函数能够处理小数点输入,我们需要调整验证逻辑。我们可以允许用户输入数字和小数点,但要确保输入符合以下规则:

  1. 只允许数字和最多一个小数点。
  2. 小数点不能出现在数字的开头。
  3. 小数点只能出现一次。
  4. 如果输入的是非数字和非小数点字符,则删除最后一个字符。

根据这些规则,下面是修改后的代码:

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) // 如果输入多个小数点,删除最后一个字符
  }
}

解释:

  1. 正则表达式 /^\d*\.?\d*$/

    • \d*:匹配数字(可以是零个或多个)。
    • \.?:允许有一个小数点(可以没有或最多一个)。
    • \d*:小数点后面可以是零个或多个数字。
  2. 去掉首位的0

    • 通过 value.length === 2 && value[0] === '0' && value[1] !== '.' 来确保只有在首位是0且第二位不是小数点时,才去掉首位的0。
  3. 限制小数点数量

    • 使用 const dotCount = (value.match(/\./g) || []).length 来检查输入中小数点的数量。如果数量超过1,则删除最后一个字符。

示例:

  • 输入 0123 会变成 123
  • 输入 1.23 会保持不变。
  • 输入 123.45.67 会删除最后一个小数点后的部分,变为 123.45

这个修改可以确保你能够正确地输入数字和小数点,并且避免不合法的输入。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的沙粒

您的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值