vue element 的输入框input限制只可以输入整数 不能输入拼音符号小数点

本文介绍了一种使用JavaScript和HTML实现的仅允许输入数字的输入框方法。通过监听键盘按键事件,确保用户只能输入数字字符。
 <el-input onKeypress="return(/[\d]/.test(String.fromCharCode(event.keyCode)))"></el-input>

 onKeypress="return(/[\d]/.test(String.fromCharCode(event.keyCode)))"

Vue3 中使用 Element Plus 的 `el-input` 组件时,如果你希望限制用户**只能输入数字类型(整数或小数)**,并且**禁止输入符号、字母和其他非法字符**,可以通过以下几种方式实现。 --- ### ✅ 方案一:使用 `type="number"`(最简单) ```vue <template> <el-input v-model="numberValue" type="number" placeholder="请输入数字" /> </el-input> </template> <script setup> import { ref } from 'vue' const numberValue = ref('') </script> ``` > ⚠️ 注意:虽然 `type="number"` 允许只输入数字,但仍然允许输入像 `e` 或 `-` 这样的字符(科学计数法),这可能不是你想要的。 --- ### ✅ 方案二:监听 `input` 事件 + 正则过滤(推荐) 通过监听 `input` 事件,在输入时立即过滤掉非数字字符(支持小数): ```vue <template> <el-input v-model="numberValue" @input="handleInput" placeholder="只能输入数字(包括小数)" /> </el-input> </template> <script setup> import { ref } from 'vue' const numberValue = ref('') const handleInput = (value) => { // 只允许数字和一个小数点(正则匹配最多一个小数点) const newValue = value.replace(/[^0-9.]/g, '') // 去除非数字和点 const parts = newValue.split('.') // 保留第一个小数点,去除后面多余的 const filteredValue = parts[0] + (parts.length > 1 ? '.' : '') + parts.slice(1).join('') numberValue.value = filteredValue } </script> ``` #### 🔍 解释: - `replace(/[^0-9.]/g, '')`:移除所有非数字和小数点的字符。 - `split('.')` 和拼接:防止出现多个小数点(如 `1..2`)。 - 支持输入 `123`、`12.34`,但不会让 `abc`、`+-*/` 等字符进入。 --- ### ✅ 方案三:仅允许整数(无小数) 如果只允许整数(不允许小数点): ```vue <template> <el-input v-model="intValue" @input="handleIntegerInput" placeholder="只能输入整数" /> </el-input> </template> <script setup> import { ref } from 'vue' const intValue = ref('') const handleIntegerInput = (value) => { // 只保留数字 const newValue = value.replace(/[^0-9]/g, '') intValue.value = newValue } </script> ``` --- ### ✅ 方案四:使用自定义指令(适用于多个输入框复用) 你可以封装一个全局指令来统一处理: ```js // directives/numberInput.js export default { mounted(el, binding) { const input = el.querySelector('input') const isFloat = binding.value?.float ?? true // 是否允许小数 const filter = (value) => { if (isFloat) { return value.replace(/[^0-9.]/g, '').replace(/^(\d*\.?\d*).*$/, '$1') // 最多一个小数点 } else { return value.replace(/[^0-9]/g, '') } } const onInput = (e) => { const val = e.target.value const filtered = filter(val) if (val !== filtered) { e.target.value = filtered // 触发 Vue 更新 e.target.dispatchEvent(new Event('input')) } } input.addEventListener('input', onInput) }, } ``` 注册指令(在 main.js 或 app 处): ```js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import numberInput from './directives/numberInput' const app = createApp(App) app.use(ElementPlus) app.directive('number-input', numberInput) app.mount('#app') ``` 使用: ```vue <template> <!-- 允许小数 --> <el-input v-number-input="{ float: true }" v-model="value1" /> <!--整数 --> <el-input v-number-input="{ float: false }" v-model="value2" /> </el-input> </template> ``` --- ### ✅ 补充:限制数值范围(可选) 还可以加上最大最小值限制: ```js const handleInput = (value) => { let newValue = value.replace(/[^0-9.]/g, '') const parts = newValue.split('.') newValue = parts[0] + (parts.length > 1 ? '.' : '') + parts.slice(1).join('') // 转为数字判断范围(例如 0 ~ 100) const num = parseFloat(newValue) if (!isNaN(num)) { if (num < 0) newValue = '0' if (num > 100) newValue = '100' } numberValue.value = newValue } ``` --- ### ✅ 总结对比 | 方案 | 是否支持小数 | 是否阻止非法字符 | 是否可控制范围 | 推荐度 | |------|---------------|------------------|----------------|--------| | `type="number"` | ✅ | ❌(仍可输 e, -) | ✅ | ⭐⭐ | | `@input` + 正则 | ✅(可配置) | ✅ | ✅ | ⭐⭐⭐⭐⭐ | | 自定义指令 | ✅(灵活) | ✅ | ✅ | ⭐⭐⭐⭐ | --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值