背景:在input输入框中只能输入负号- 和小数点.还有数字1-9
字母等其他符号不允许输入
想法: 1.找遍了正则表达以上需求的,但是没有一个实现的,主要就是负号比较难搞,小数点的正则倒是可以。
比如这个正则:/\-?[0-9]{1,2}\.?[\d]{0,3}/,我觉得是可以的,但是就是检测不到负号.....
2.<el-input v-module="xxx"></el-input>中的v-module不支持.number修饰符
3.<el-input v-module="xxx" type="number"></el-input>输入框会显示步进器,而且字母e E会编译为数字显示出来
最终方法:利用match函数(检测负号)+正则表达式(检测整数和小数)
match函数:
有兴趣的可以去仔细看一下:JavaScript match() 方法 | 菜鸟教程
<el-input v-model="params.scoreBegin" style="width: 45%;" placeholder="请输入1-100的数字" @input="limit100($event, 'scoreBegin')"></el-input>
//用来检索整数且不超过三位数
const limit100 = /[0-9]{1,3}/
/用来检索小数且小数点后不超过三位数
const limit100dot = /[0-9]{1,2}.[\d]{0,3}/
limit100(new_v, item) {
if (new_v) {
new_v = new_v + "";
let nn = "";
// 正负判断
if (new_v.match('-')) {
nn=new_v.match('-')[0]
}
// 小数判断
if (new_v.indexOf('.') != -1) {
if (new_v.match(limit100dot)) {
nn = nn+new_v.match(limit100dot)[0] || '';
}
} else {
if (new_v.match(limit100)) {
nn =nn+ new_v.match(limit100)[0] || '';
}
}
// 限制数字最大为100
if (parseFloat(nn) > 100) nn = 100;
this.params[item] = nn;
}
},