总结一下input数字校验
1、speedLimit: [
{ required: true, message: '请输入。。。', trigger: 'blur' },
{ validator: isPositiveNum, trigger: 'blur' }
],
加上trigger,没有设置type,默认是string,数据类型没法通过校验
2、speedLimit: [
{ required: true, message: '请输入。。。', type: "number", trigger: 'blur' },
{ validator: isPositiveNum, trigger: 'blur' }
],
加上type:number,输入非数字, { required: true, message: '请输入。。。', type: "number", trigger: 'blur' },此条校验就无法通过,下一条 { validator: isPositiveNum, trigger: 'blur' }不校验
3、speedLimit: [
{ required: true, validator: isPositiveNum, trigger: 'blur' }
],
isPositiveNum (rule, value, callback) {
if (value) {
let val = value.toString()
if (val == '') {
callback(new Error('不能为空'));
} else if (! /(^[1-9]\d*$)|(^\d+\.[0-9]{1,2}$)/.test(value)) {
callback(new Error('请输入正数,最多输入两位小数'));
} else callback();
} else callback(new Error('不能为空'));
采用自定义的校验;在blur状态下执行。不加trigger实时性校验
4、speedLimit: [
{ required: true, message: '请输入。。。' },
{ validator: isPositiveNum }
],
每输入一个字符就会校验一次,实时性高。为空时显示'请输入。。。',输入非数字显示'请输入正数,最多输入两位小数'。
综上:校验input不用指定trigger,如果将校验方法抽离出来,建议采用第4种方法,在未输入的时候,方便单独设定请输入的字段。单独校验的时候只校验数据类型即可。