input框限制输入小数

<el-input @keyup.native="clearNoNum">
    clearNoNum(e) {
      const obj = e.target
      console.log(obj)
      obj.value = obj.value.replace(/[^\d.]/g, '') // 清除“数字”和“.”以外的字符
      obj.value = obj.value.replace(/\.{2,}/g, '.') // 只保留第一个. 清除多余的
      obj.value = obj.value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.')
      obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')// 只能输入两个小数
      if (obj.value.indexOf('.') < 0 && obj.value !== '') { // 以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
        obj.value = parseFloat(obj.value)
      }
    },
在 UniApp 中限制 input 输入小数有多种实现方法,以下为你介绍常见的两种: ### 方法一:通过正则替换在模板中直接处理 在模板里使用 `@input` 事件,借助正则表达式替换输入内容,从而限制输入负数并且保留小数点后两位。 ```vue <template> <view> <input type="number" placeholder="请输入" v-model="num" @input="num=num.toString().replace(/\-/g,'').match(/^\d+(?:\.\d{0,2})?/)" /> </view> </template> <script> export default { data() { return { num: '' } } } </script> ``` 在以上代码中,`@input` 事件绑定的处理函数利用正则表达式 `/^\d+(?:\.\d{0,2})?/` 匹配输入内容,仅保留整数部分和最多两位小数,同时使用 `replace(/\-/g,'')` 去除负号 [^1]。 ### 方法二:在方法中使用正则匹配并重新赋值 在 `<script>` 部分定义方法,在方法里运用正则表达式匹配输入内容,再重新赋值给 `v-model` 绑定的数据。 ```vue <template> <view> <input v-model="money" type="number" @input="check" placeholder="金额(元)" /> </view> </template> <script> export default { data() { return { money: '' } }, methods: { check: function(e) { // 正则表达式 e.target.value = (e.target.value.match(/^\d*(\.?\d{0,2})/g)[0]) || null // 重新赋值给 input this.$nextTick(() => { this.money = e.target.value }) } } } </script> ``` 在上述代码中,`check` 方法使用正则表达式 `/^\d*(\.?\d{0,2})/g` 匹配输入内容,仅保留整数部分和最多两位小数,然后通过 `this.$nextTick` 在 DOM 更新后将处理后的值赋给 `money` [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值