首先,el-input中type值为number
<el-input type="number" v-model= "caseData.claimMessageVo.primary" @input="numContro($event,"primary")"></el-input>
js
numContro(value,name){
let val = (value && value.split("")) || [];
//caseData.claimMessageVo是值所在的对象
this.caseData.claimMessageVo[name] = val.join("").match(/^\d*(\.?\d{0,2})/g)[0] || null;
},
补充:
numContro的方法也可以更详细,提供一版稍微详细的方法
//obj 为值所在的对象,可以根据自己的需求适当增减变量
numContro(value, obj, list, index, name) {
if (!value) return;
let val = (value && value.split("")) || [];
let sNum = val.toString();
if (sNum.indexOf(".") === 0) {
sNum = "0" + sNum;//若第一位直接写 . 的情况下,给首位拼接一个0
}
sNum = sNum.replace(/[^\d.]/g, ""); // 过滤
sNum = sNum.replace(/\.{2,}/g, "."); //只留第一个小数点,清除多余的
sNum = sNum
.replace(".", "$#$")
.replace(/\./g, "")
.replace("$#$", ".");
sNum = sNum.replace(/^(-)*(\d+)\.(\d\d).*$/, "$1$2.$3"); //只能输入两个小数
if (sNum.indexOf(".") < 0 && sNum !== "") {
sNum = parseFloat(sNum); // 控制首位不能为0
}
//此处将值重新赋给绑定的变量
this[obj][list][index][name] = sNum;
},