el-input限制只能输入价格格式

bash 复制代码
<!-- 封装的价格表单组件 -->

<template>
  <el-input :value="value" :placeholder="placeholder" @input="handleInput" />
</template>

<script>
export default {
  name: "PriceInput",
  props: {
    value: {
      type: [String, Number],
      default: "",
    },
    placeholder: {
      type: String,
      default: "请输入",
    },
  },
  methods: {
    handleInput(value) {
      // 如果完全删除输入,直接传递空值
      if (value === "") {
        this.$emit("input", "");
        return;
      }

      // 仅允许数字和小数点
      let newValue = value.replace(/[^\d.]/g, "");

      // 限制只能有一个小数点
      const parts = newValue.split(".");
      if (parts.length > 2) {
        newValue = parts[0] + "." + parts.slice(1).join("");
      }

      // 再次拆分整数和小数部分
      const finalParts = newValue.split(".");
      let integerPart = finalParts[0];
      let decimalPart = finalParts.length > 1 ? finalParts[1] : undefined;

      // 处理整数部分:去除前导零,但保留至少一个零
      if (integerPart !== undefined && integerPart !== "") {
        integerPart = integerPart.replace(/^0+/, "");
        if (integerPart === "") integerPart = "0";
      } else {
        integerPart = "0";
      }

      // 限制小数部分最多两位
      if (decimalPart !== undefined && decimalPart.length > 2) {
        decimalPart = decimalPart.substring(0, 2);
      }

      // 重组最终字符串
      let result = integerPart;
      if (decimalPart !== undefined) {
        result += "." + decimalPart;
      }

      this.$emit("input", result);
    },
  },
};
</script>

也可以使用组件el-input-number,可参考链接,但注意处理后格式为String了。

相关推荐
Web4Browser2 分钟前
Headless 浏览器自动化适合哪些任务?巡检、截图和提交动作要分级
运维·前端·自动化
用户059540174465 分钟前
把前端内存泄漏排查从2小时压到5分钟,我们把它集成进了CI
前端·css
WindfallSheng43 分钟前
从Vibe Coding到Spec Coding:一套可落地的AI-SDD企业级研发实战工程
javascript·vue.js
申君健24864182772021 小时前
Vapor 核心数据结构:Block原理
前端
Csvn1 小时前
工程化专题 | 改完组件保存,浏览器毫无反应,重启 dev server 又好了——气不气?
前端
我有满天星辰1 小时前
Vue 指令完全指南:从 Vue 2 到 Vue 3 的演进与实战
前端·javascript·vue.js
光影少年1 小时前
RN 渲染原理:不依赖WebView,原生控件渲染
前端·react native·react.js·前端框架
小白学过的代码1 小时前
# flv.js / mpegts.js 播不了国标摄像头(H.265 + G.711A)?纯前端 Jessibuca 无后端方案(附完整代码)
前端·javascript·h.265
console.log('npc')2 小时前
AI Agent 前端流式渲染核心技术文档(SSE \+ WebSocket \+ 打字机渲染)
前端·人工智能·websocket
法外狂徒12 小时前
将 Pi Agent 接入 HagiCode 的实践之路
服务器·前端·人工智能