表单输入框自定义校验00开头数字问题
场景:表单校验用户只能输入6-7为数字
误区:使用element input中v-model.number 或者正则reg来判断。不能用这两种判断的原因是当用户输入0开头的数字时,会把前面的0去掉。 比如输入了 000001,后面的value会是1
解决办法:
<el-form-item label="警员编号:" prop="jobNumber">
<el-input v-model="submitObj.jobNumber"></el-input>
</el-form-item>
rules: {
jobNumber: [
{ required: true, validator: checkJobNumber, trigger: 'blur' },
]
},
var checkJobNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error('警员编号不能为空'))
}
setTimeout(() => {
if (!Number.isInteger(+value)) {
callback(new Error('请输入数字值'))
} else {
if (value.length === 6 || value.length === 7) {
callback()
} else {
callback(new Error('请输入6-7位纯数字的警员编号'))
}
}
}, 100)
}
思路:先隐式转换为数字,判断是否为数字,再判断长度即可。