vue学习之elementUI组件el-input输入框只能输入数字或保留两位小数

本文介绍在前端开发中,如何使用type属性和正则表达式限制输入框仅接收数字输入,包括整数和保留两位小数的方法,并提供表单校验策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

只能输入数字的两种方法:

方法一:使用type=“number”

<el-input v-model.number='count' type='number' maxlength='9'/>
缺点:
  • maxlength不生效
  • 可以输入e
  • 可以输入小数点

方法二:使用正则表达式

<el-input v-model.number='count' oninput="value=value.replace(/[^\d]/g,'')" maxlength='9'/>

其中v-model.number确保获得的count值为数字,即使0开头也会被后续数字代替。


输入数字或保留两位小数的表单校验

//不使用表单校验
//缺点:不能输入0.01
<el-input oninput="value=value.indexOf('.') > -1?value.slice(0, value.indexOf('.') + 3):value" type="number" v-model.number="num"></el-input>
//解决:把v-model的number去掉即可
<el-input oninput="value=value.indexOf('.') > -1?value.slice(0, value.indexOf('.') + 3):value" type="number" v-model="num"></el-input>
//原因:v-model.number会把0.0x后的数字转换为0,算是输入框的一个特性吧。

//使用表单校验
cost:[
 { required: true, trigger: 'change', message:'请输入金额'},
 { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '请输入正确的格式,可保留两位小数' }
],
### 实现 Vue Element-UI Input 输入框千分位格式化并保留两位小数 为了实现在 Vue 中使用 Element-UI 的 `el-input` 组件来创建一个仅允许输入数字输入框,并自动将其格式化为带千分位且保留两位小数的形式,可以按照以下方式实现。 #### 1. 工具函数定义 首先需要编写一个工具函数用于处理金额格式化。此函数接收原始值作为参数,返回经过千分位格式化后的字符串形式数据: ```javascript // utils/amountFormat.js export function formatAmount(value) { if (!value && value !== 0) return ''; // 如果值为空者未定义,则返回空串 const num = parseFloat(value); if (isNaN(num)) return ''; // 使用 toLocaleString 方法进行千分位格式化,并保留两位小数 return num.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } export function parseAmount(formattedValue) { if (!formattedValue) return null; // 去除所有非数字字符并将字符串转换回浮点数 return parseFloat(formattedValue.replace(/[^0-9.-]+/g,"")); } ``` 该部分逻辑实现了两个功能:一是将普通的数值转化为具有千分号标记以及固定精度的小数表示;二是反向操作——从显示样式还原成可用于计算的真实数值[^3]。 #### 2. 数据绑定与事件监听设置 接着,在模板文件里配置好相应的属性方法调用关系。这里通过 `v-model` 双向绑定了表单字段到组件实例的数据模型上,同时利用自定义指令事件处理器完成即时更新视图的效果。 ```html <template> <div class="example"> <!-- el-input 设置 --> <el-input style="width: 220px;" placeholder="请输入金额" v-model.trim="displayedRegistCapital" @input="handleInputChange" clearable /> <!-- 隐藏域存储实际提交使用的纯数值 --> <span>真实值:{{ actualRegistCapital }}</span> </div> </template> <script> import {formatAmount, parseAmount} from '@/utils/amountFormat'; export default { data() { return { displayedRegistCapital: '', // 展示给用户的已格式化的金额 actualRegistCapital: null // 存储未经格式化的原始数值供后续业务逻辑使用 }; }, methods:{ handleInputChange(event){ let rawValue = event.target.value; // 清理非法字符后再尝试解析有效数字 const parsedNumber = parseAmount(rawValue); if(parsedNumber != null){ this.actualRegistCapital = parsedNumber; // 更新展示版本的内容 this.displayedRegistCapital = formatAmount(this.actualRegistCapital); }else{ this.displayedRegistCapital = ''; this.actualRegistCapital = null; } } } }; </script> ``` 上述代码片段展示了如何结合 Vue Element-UI 来构建满足需求的功能模块。其中特别注意的是对于用户直接修改内容时触发的回调函数设计,它负责同步调整内部状态变量的同时也维护着界面上呈现出来的最终效果[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

King's Blog

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值