vue3 自定义指令控制输入框只能输入数字,小数

  1. 指令使用例子
    <el-input v-model="input1" style="width: 240px" placeholder="Please input" v-format-number="{ precision: 2 }" />

     

  2. 指令代码
    复制代码
    const vFormatNumber = {
      mounted(el, binding) {
        el.addEventListener('input', (event) => { 
          let newVal = event.target.value;
          const precision = binding.value.precision
    
          newVal = newVal.replace(/[^\d.]/g, '') // 能数字和小数点
          newVal = newVal.replace(/^\./g, '') // 去掉开头的点
          newVal = newVal.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 处理多个点的情况
          if (precision && Number(precision) > 0) {
            const d = new Array(Number(precision)).fill('\\d').join('') // 构建正则表达式
            const reg = new RegExp(`^(\\-)*(\\d+)\\.(${d}).*$`, 'ig')
            newVal = newVal.replace(reg, '$1$2.$3') // 限制小数位数
          }
          if (newVal && !newVal.includes('.')) {
            newVal = newVal.replace(/^0+/, '0')  // 
          }
    
          // 更新输入框的值
          event.target.value = newVal;
          // 同步 v-model 的值
          el.querySelector("input").dispatchEvent(new Event("input"))
        })
      }
    }
    复制代码

     

posted @   深巷漫步  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-02-20 vscode如何一键生成代码模板?
/* 看板娘 */
点击右上角即可分享
微信分享提示