input的限制只能输入数字的小需求:
在日常项目开发过程中,我们经常会用到 ElementUI 这个组件库,其中的 el-input组件并没有对数字的进行限制的功能,特别是有的项目中需要限制只能填写数字,不能为负数,不能有多个小数点,小数位多少,整数位多少等等。为实现这些需求,组件默认的功能就很难满足了,需要专门写代码来控制。
为了减少开发成本,提高工作效率,我整理了如下2种方法,大家可以根据实际情况使用,以下方法仍旧适用普通 input 标签。
方法一:使用行内正则控制
方法二:使用封装的通用方法进行更细粒度的统一控制,可单独控制整数位和小数位个数。(推荐使用)
主要做了如下限制:
限制只能填写数字类型;
限制整数和小数位数;
限制只有一个小数点;
限制不能以小数点开头;
限制整数不出现00的情况;
上代码:
<template>
<div id="app">
<el-form>
<!-- 方法一:使用行内正则控制 -->
<el-form-item label="输入各种数字--只能输入数字(正整数)">
<el-input
type="text"
size="small"
width="50"
v-model="param.roleId1"
placeholder="请输入数字"
clearable
style="width:160px"
oninput ="value=value.replace(/[^\d]/g, '')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字(包含正负数)">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId2"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d]/g, '')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字和小数">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId3"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d.]/g, '').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字和小数,只保留一个小数点">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId4"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\d.]/g, '').replace(/^(\d+)\.(\d).*$/, '$1.$2').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字和小数,只保留一个小数点(包含负数)">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId5"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d.]/g, '').replace(/^(\-)*(\d+)\.(\d+).*$/, '$1$2.$3').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字和小数,只保留一个小数点,只保留2位小数(包含负数)">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId6"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d.]/g, '').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--只能输入数字和小数,只保留一个小数点,只保留3位小数(包含负数)">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId7"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d.]/g, '').replace(/^(\-)*(\d+)\.(\d${3}).*$/, '$1$2.$3').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item label="输入各种数字--【终极】只能输入数字和小数,只保留一个小数点,只保留3位小数(包含负数)">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.roleId8"
placeholder="请输入数字"
oninput ="value=value.replace(/[^\-\d.]/g, '').replace(/(\.)(\d*)(\1*)/g,'$1$2').replace(/^(\-)*(\d+)\.(\d{2}).*$/, '$1.$2').replace(/\.{2}/g, '.')">
</el-input>
</el-form-item>
<el-form-item>
<el-input v-model="money" οninput="value=value.replace(/[^\d.]/g,'')">
<span slot="suffix">/ 元 </span>
</el-input>
</el-form-item>
<el-form-item>
<el-form-item label="输入数字自定义参数设置就行">
<el-input
type="text"
size="small"
width="50"
clearable
style="width:160px"
v-model="param.rolenum"
placeholder="请输入数字"
οninput="checkNum(this, 4, 2)">
</el-input>
</el-form-item>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
name: 'App',
components: { },
data() {
return {
money: "",
param: {
roleId1: "",
roleId2: "",
roleId3: "",
roleId4: "",
roleId5: "",
roleId6: "",
roleId7: "",
roleId8: "",
rolenum: "" },
}
},
created() {
},
mounted() {
/*
*@name: checkNum
*@param: intNum表示整数位个数, 默认0为不限制
*@param: decNum 表示小数位个数,默认0为没小数
*@desc:用于限制 input 输入的数字位数(包含小数位)
*/
window.checkNum = function (obj, intNum = 0, decNum = 0) {
var value = obj.value
var changeValue, t1, t2
switch (decNum) {
case 0:
value = value.replace(/[^\d]/g, '')// 去除数字以外的字符,若要支持负数,可将此处正则改为/[^\-\d]/g
value = value.replace(/^0\d+/g, '0')// 防止整数位出现'00'的情况
if (intNum !== 0) {
value = value.substr(0, intNum)
}
break
default:
value = value.replace(/[^\d.]/g, '')// 去除数字和小数点以外的字符,若要支持负数,可将此处正则改为/[^\-\d.]/g
value = value.replace(/^[^\d]/g, '')// 保证第一个字符是数字,若要支持负数,可将此处正则改为/^[^\-\d]/g
value = value.replace(/\.{2}/g, '.')// 去除第二个小数点
value = value.replace(/^0\d+/g, '0')
changeValue = value.split('.')
if (changeValue.length > 1) { // 表示用户输入的既有整数又有小数
if (intNum === 0) {
t1 = changeValue[0]
} else {
t1 = changeValue[0].substr(0, intNum)
}
t2 = changeValue[1].substr(0, decNum)
value = t1 + '.' + t2
} else {
if (intNum !== 0) {
value = value.substr(0, intNum)
}
}
break
}
if (obj.value !== value) {
obj.value = value
}
return value
}
},
methods: {
},
beforeDestroy() {
window.checkNum = null
}
}
</script>
<style>
</style>