当前位置: 首页 > article >正文

vue中做一个最多输入一位小数且可以为负数的输入框(包含最前面最后面为小数点及多个-符号与前导零校验)

需求背景

日常开发中会有对input做校验的需求  例如做一个只可以输入一位小数及可以为负数的输入框  这时候会出现0开头、多个--、多个小数点插入或开头结尾为小数点的情况

实现过程

<el-input
            style="width: 80px;"
            v-model="dataForm.low"
            @input="lowHandleInput($event, 'low')"
            @blur="lowValueBlur('low')"
          ></el-input>
const formatValue=(value:any)=> {
      // 格式化输入的值,确保最多1位小数
      const [integerPart, decimalPart] = value.split(".");
      if (decimalPart && decimalPart.length > 1) {
        return `${integerPart}.${decimalPart.slice(0, 1)}`;
      }
      //只保留最前面的.
      value=value.replace(/\.(?=.*\.)/g, '');
      //多个-处理
      const firstChar = value[0] || '';
      const restOfString = value.slice(1).replace(/-/g, '');
      value= firstChar + restOfString;
      return value;
    }
  const  lowHandleInput=(value:any,name:string)=> {
      //基础格式检测
      const regex = /^[-]?\d*(\.\d{0,1})?$/;
      if (!regex.test(value)) {
        dataForm[name] = formatValue(
          value.replace(/[^-\d.]/g, "").replace(/(\.\d*)?\.$/, "$1"),
        );
        return;
      }
      dataForm[name] = formatValue(value);
    }
  const  lowValueBlur=(name:string)=> {
      if (dataForm[name].length) {
        //最后一位为.
        if (dataForm[name][dataForm[name].length - 1] == ".") {
          dataForm[name] = dataForm[name].slice(0, -1);
        }
        //最前面为.
        if (dataForm[name][0] == ".") {
          dataForm[name] = dataForm[name].slice(1);
        }
        //将前导零忽略
        dataForm[name]=String(Number(dataForm[name]));
      }
  }

失焦及输入事件可传key进行复用  若小数点需要支持多位 例如3位时可将正则及slice内数字1进行替换为3


http://www.kler.cn/a/451963.html

相关文章:

  • 《Mycat核心技术》第06章:Mycat问题处理总结
  • RPA系列-uipath 学习笔记3
  • 查看php已安装扩展命令
  • iClient3D for Cesium 加载shp数据并拉伸为白模
  • css 编写注意-1-命名约定
  • DX12 快速教程(2) —— 渲染天蓝色窗口
  • PaginationInnerInterceptor,spring中pojo
  • WebRTC搭建与应用(五)-Coturn踩坑记
  • 游戏APP如何设计混合变现,最大化变现收益?
  • Unity 重写GridLayoutGroup使居中对齐
  • HarmonyOS NEXT 实战之元服务:静态案例效果---最近播放音乐
  • imx6ull qt多页面控制系统(正点原子imx系列驱动开发)
  • ASN.1 轻松入门2
  • HarmonyOS NEXT 实战之元服务:静态案例效果(二)
  • 131、sqlserver中使用mybatis中的Page进行分页查询时,SQL成功执行(控制台已打印),Page的Records没值bug1.代码复现:
  • NUCLEO-F446RE测试板验证DS100示波器功能
  • 【视觉惯性SLAM:编译及编译工具】
  • 2024.8 设计可解释的 ML 系统以增强对医疗保健的信任:对提出的负责任的临床医生-AI 协作框架的系统评价
  • wordpress调用指定ID分类下浏览最多的内容
  • 印度软件业的发展能给中国软件行业什么样的启示和借鉴
  • C语言-基因序列转换独热码(one-hot code)
  • 开关电源特点、分类、工作方式
  • 【开源免费】基于SpringBoot+Vue.JS在线宠物用品交易网站(JAVA毕业设计)
  • 网络下载ts流媒体
  • JVM简介—1.Java内存区域
  • VBA实现遍历Excel文件将指定的单元格内容拷贝到当前工作簿