element 使用自定义表单验证

1.问题描述
项目开发过程中,遇到表单校验,这次的校验规则比较严,element-ui表单自带的校验完全解决不了问题。

2.解决方法
使用elementui表单校验中的自定义校验,validUsername是自定义的校验方法名称

   2.1 定义表单校验: 

rules: {
  userTypeId: [
    { required: true, message: '请选择类型', trigger: 'change' },
  username: 
    { required: true, validator: validUsername, trigger: 'blur' }
  ]
}

   2.2 自定义校验方法:
注意:方法中一定义要返回callback(),不然表单校验时是不会成功的

export default {
  name: 'Registry',
  data() {
    // js部分
    const validUsername = (rule, value, callback) => {
      const reg = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,18}$/
      if (value === '') {
        callback(new Error('请输入用户名'))
      } else if (!reg.test(value)) {
        callback(new Error('用户名必须是由6-18位英文(含大小写)+数字组成'))
      } else {
        callback()
      }
    }
  }
}

3.表单校验

this.$refs.ruleForm.validate((valid) => {
  if(valid){
    console.log('表单校验成功')
  }
})

4.清除表单校验结果
取消按钮可能使用到 

this.$refs.pwdChangeForm.clearValidate()

简单案例:修改密码

 定义表单校验: 

rules: {
  newPassword: [
    { required: true, message: '新密码不能为空', trigger: 'blur' },
    { min: 8, max: 16, message: '长度在 8 到 16 个字符', trigger: 'blur' },
    { required: true, validator: toPassword, trigger: "blur" }
  ],
  confirmPassword: [
    { required: true, message: "确认密码不能为空", trigger: "blur" },
    { required: true, validator: equalToPassword, trigger: "blur" }
  ]
},

自定义校验方法:
注意:方法中一定义要返回callback(),不然表单校验时是不会成功的

export default {
  name: 'Registry',
  data() {
    // js部分
    // 密码自定义校验
    const toPassword = (rule, value, callback) => {
      var passwordreg = /(?![A-Z]*$)(?![a-z]*$)(?![0-9]*$)(?![^a-zA-Z0-9]*$)/
      if (!passwordreg.test(value)) {
        callback(
          new Error(
            '密码必须由大写字母、小写字母、数字、特殊符号中的2种及以上类型组成!'
          )
        )
      } else {
        callback()
      }
    }
    // 确认密码自定义校验
    const equalToPassword= (rule, value, callback) => {
      if (this.infoForm.newPassword !== value) {
        callback(new Error("两次输入的密码不一致"));
      } else {
        callback();
      }
    }
  }
}

参考文章:element-ui表单自定义校验_element表单自定义校验_郑石秀的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/cdd9527/article/details/130421764