VUE项目中如何进行表单校验


前言

本文主要讲解Form 表单的必填项校验、正则验证、自定义校验规则和兜底校验

为什么要进行表单校验呢? 如果说用户每次填写完信息都提交给服务器,服务器返回说你的信息填写的格式不正确,又要重新提交一次,又告诉你不正确,这样效率是不是很低呢!这就是表单校验的意义所在!在提交服务器之前全部校验一次!格式正确才让你提交!


一、表单校验的三大要素

(1.)el-form 上的 model 属性
(2.)el-form 上的 rules 属性
(3.)el-form-item 上的 prop 属性
在这里插入图片描述

model负责拿到表单所有项的数据
在这里插入图片描述

rules负责校验规则
在这里插入图片描述

props负责告诉form表单 model里的数据 和 rules 的对应关系,这里注意一个问题,prop的值一定要和校验规则里的值一致,最好prop和v-model和rules里的值三个都一样,这样不容易出错

二、使用步骤

1.定义规则(必填项校验、正则验证)

这里以username用户名的校验为例
在这里插入图片描述
每一项的校验规则都为一个数组,数组里放了多个对象,每个对象代表一个校验规则,
这里的第一个对象代表必填项校验(required),message是提示信息,trigger代表何时触发校验
第二个对象就是正则校验,可以利用pattern自定义规则

在这里插入图片描述

2.自定义校验

为什么需要自定义校验呢?比如用户注册时,输入密码完需要确认密码,这时就需要自定义校验校验看看两者是否一致 这里以确认密码为例讲解

 repassword: [
          // 非空判断
          {
    
     required: true, message: '请再次输入密码', trigger: 'blur' },
          {
    
     pattern: /^\S{6,15}$/, message: '请输入 6 ~ 15 位的非空字符', trigger: 'blur' },
          // 自定义校验: 两次输入的密码是否一致
          {
    
     validator: checkPwd, trigger: 'blur' }
        ]

repassword是确认密码的校验规则,第三个对象里的validator即为自定义校验,checkPwd为触发的自定义校验函数,这个函数的定义需要写在 data数据return的上面,其中参数二就是确认密码填写的值,需要和regForm.password的的值作对比
参数三尤其注意,这个回调函数无论 密码 和确认密码 一不一致都必须调用一次
callback(new Error(‘两次输入的密码不一致’))表示不通过
callback()表示通过

 data() {
    
    
    // 参数1: rule 对象, 是校验规则, 一般不用
    // 参数2: value 校验项的数据
    // 参数3: callback 回调函数, 决定是否校验通过
    const checkPwd = (rule, value, callback) => {
    
    
      if (value !== this.regForm.password) {
    
    
        callback(new Error('两次输入的密码不一致'))
      } else {
    
    
        callback()
      }
    }
    return {
    
    
      regForm: {
    
    
        username: '',
        password: '',
        repassword: ''
      },
      regRules: {
    
    
        username: [
          // 非空
          {
    
     required: true, message: '请输入用户名', trigger: 'blur' },
          // 用户名必须是 1 ~ 10 位的数字字母, 同时不能以数字开头
          {
    
     pattern: /^[a-zA-Z][a-zA-Z0-9]{0,9}$/, message: '请输入 1 ~ 10 位的数字或字母, 不能以数字开头', trigger: 'blur' }
        ],
        password: [
          // 非空
          {
    
     required: true, message: '请输入密码', trigger: 'blur' },
          {
    
     pattern: /^\S{6,15}$/, message: '请输入 6 ~ 15 位的非空字符', trigger: 'blur' }
        ],
        repassword: [
          // 非空
          {
    
     required: true, message: '请再次输入密码', trigger: 'blur' },
          {
    
     pattern: /^\S{6,15}$/, message: '请输入 6 ~ 15 位的非空字符', trigger: 'blur' },
          // 自定义校验: 两次输入的密码是否一致
          {
    
     validator: checkPwd, trigger: 'blur' }
        ]
      }
    }
  }

在这里插入图片描述

3.兜底校验

为什么要有兜底校验呢? 前面所讲的几种校验方式都是在提醒用户,诶!你这样填有点不对劲啊!但是用户要是很固执,照样提交,你也没办法!
这就需要咱们的兜底校验登场了! 在你提交请求之前,帮你把所有的校验再过一遍,只要有一项校验不通过,那就无法提交申请!

 methods: {
    
    
    reg() {
    
    
      // validate 方法就是做兜底校验
      // 传入一个回调函数, 回调函数第一个参数就是是否通过的结果
      //如果全部通过了校验,则valid为true,但凡有一项没通过,则valid为false
      this.$refs.regForm.validate(async valid => {
    
    
        if (!valid) return
        const {
    
     data: res } = await this.$http.post('/api/reg', this.regForm)
        if (res.code !== 0) return this.$message.error(res.message)
        this.$message.success(res.message)
        // 4. 跳转至登录页 /login
        // 编程式导航
        this.$router.push('/login')
      })
    }
  }

创作不易,如果这篇文章有帮助到你的话,给作者点赞加关注吧~
想要源码学习的同学加q裙 681851172

总结

以上就是今天要讲的内容,本文介绍了表单校验的使用,可以让用户获得更好的体验!

猜你喜欢

转载自blog.csdn.net/m0_57524265/article/details/130929210