1、类型1:只能输入正数,不超过两个小数点,数值不超过50 或 N.A
2、类型2:只能输入正数,且不超过两位小数 或 N.A
3、只能输入正整数
<el-input
maxlength="5"
@input="(val) =>numberInputChange(val,'类型1', targetField) "
v-model="targetField"
/>
<el-input
@input="(val) =>numberInputChange(val,'类型2', targetField) "
v-model="targetField"
/>
<el-input
@input="(val) =>numberInputChange(val,'类型3', targetField) "
v-model="targetField"
/>
numberInputChange(val, key, targetField) {
if (key === "类型1") {
if(val!=='N' && val!=='N.' && val!=='N.A'){ // 类型1:只能输入正数,不超过两个小数点,数值不超过50 或 N.A
if(val.indexOf('N')===0&&val.indexOf('N.')===-1){
targetField = 'N'
return
}
if(val.indexOf('N.')===0&&val.indexOf('N.A')===-1){
targetField = 'N.'
return
}
if(val.indexOf('N.A')===0&&'N.A'.indexOf(val)===-1){
targetField = 'N.A'
return
}
// 类型1:只能输入正数,不超过两个小数点,数值不超过50
let tempVal = val.match(/^\d+(?:\.\d{0,2})?/);
if (Number(tempVal) > 50) {
targetField = tempVal[0].substr(0, tempVal[0].length - 1);
} else {
if(tempVal){
targetField = tempVal[0];
}else{
targetField = '';
}
}
return;
}
}
if (key === "类型2") {
if(val!=='N' && val!=='N.' && val!=='N.A'){ // 类型2:只能输入正数,且不超过两位小数 或 N.A
if(val.indexOf('N')===0&&val.indexOf('N.')===-1){
targetField = 'N'
return
}
if(val.indexOf('N.')===0&&val.indexOf('N.A')===-1){
targetField = 'N.'
return
}
if(val.indexOf('N.A')===0&&'N.A'.indexOf(val)===-1){
targetField = 'N.A'
return
}
//类型2:只能输入正数,且不超过两位小数 let temp_val = val.match(/^\d+(?:\.\d{0,2})?/);
//类型2:只能输入正整数,let temp_val = val.match(/^\d+/);
let temp_val = val.match(/^\d+(?:\.\d{0,2})?/);
targetField = temp_val ? temp_val[0] : "";
return;
}
}
if(val!=='N' && val!=='N.' && val!=='N.A'){ // 类型3:文本框控制只能输入正整数或N.A
if(val.indexOf('N')===0&&val.indexOf('N.')===-1){
targetField = 'N'
return
}
if(val.indexOf('N.')===0&&val.indexOf('N.A')===-1){
targetField = 'N.'
return
}
if(val.indexOf('N.A')===0&&'N.A'.indexOf(val)===-1){
targetField = 'N.A'
return
}
// 类型3:文本框控制只能输入正整数
targetField = val.replace(/[^\d]/g, "");
}
}
实现方式很孬,但个人对正则不了解,没有更好的方法实现控制可以输入指定类型及指定字符串。如果有更好的方式,敬请指教。