vue2简单即用的vee-validate表单验证

701 阅读1分钟

本文为vue2简单使用vee-validate表单验证的记录

第一步:安装vee-validate@2插件

cnpm install --save vee-validate@2

第二步创建:utils/validate.js

并在入口文件main.js引入 import '@/utils/validate'

import VeeValidate from 'vee-validate';
import Vue from 'vue';
//中文提示信息
import zh_CN from "vee-validate/dist/locale/zh_CN";
//安装这个插件
Vue.use(VeeValidate);
//进行规则验证配置
VeeValidate.Validator.localize("zh_CN", {
    //修改人家内置规则:密码与确认密码相同
    messages: {
        ...zh_CN.messages,
        is: (field) => `${field}必须与密码相同`, // 修改内置规则的 message,让确认密码和密码相同
    },
    attributes: {
        phone: "手机号",
        code: "验证码",
        password: "密码",
        password1: "确认密码",
        agree: '协议'
    },
});
//自定义校验规则
VeeValidate.Validator.extend("agree", {
  validate: (value) => {
​    return value;
  },
  getMessage: (field) => field + "必须同意",
});


第三步:使用这个插件进行表单验证

template中:

//验证手机号:
<input type="text" placeholder="请输入你的手机号"
v-model="phone" name="phone" v-validate="{required:true,regex:/^\d{11}$/}"/>
//refgex 中为正则表达式
<span class="error-msg">{{ errors.first("phone") }}</span>//展示错误信息
//验证是否勾选
 <input
          type="checkbox"
          v-model="agree"
          name="agree"
          v-validate="{ required: true, agree: true }"/>
<span>同意协议并注册《尚品汇用户协议》</span>
<span class="error-msg">{{ errors.first("agree") }}</span>
//验证两次密码是否相同
 <input
          type="text"
          placeholder="请输入确认密码"
          v-model="password1"
          name="password1"
          v-validate="{ required: true, is: password }"/>
<span class="error-msg">{{ errors.first("password1") }}</span>

最后提交时确认所有表单都已合规的方法 const success = await this.$validator.validateAll(); success为一个布尔值可用于验证是否全部合规

最后放一个使用表单验证代码案例

<template>
  <div class="register-container">
    <!-- 注册内容 -->
    <div class="register">
      <h3>
        注册新用户
        <span class="go">我有账号,去 <a>登陆</a> </span>
      </h3>
      <!--手机号码-->
      <div class="content">
        <label>手机号:</label>
        <!-- 人家提供一个全局指令v-validate -->
        <input
          type="text"
          placeholder="请输入你的手机号"
          v-model="phone"
          name="phone"
          v-validate="{
            required: true,
            regex:
              /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/,
          }"
        />
        <span class="error-msg">{{ errors.first("phone") }}</span>
      </div>
      <!--验证码-->
      <div class="content">
        <label>验证码:</label>
        <input
          type="text"
          placeholder="请输入验证码"
          v-model="code"
          name="code"
          v-validate="{ required: true, regex: /^\d{6}$/ }"
        />
        <button style="width: 100px; height: 38px" @click="getCode">
          获取验证码
        </button>
        <span class="error-msg">{{ errors.first("code") }}</span>
      </div>
      <!--登录密码-->
      <div class="content">
        <label>登录密码:</label>
        <input
          type="text"
          placeholder="请输入你的登录密码"
          v-model="password"
          name="password"
          v-validate="{
            required: true,
            regex:
              /^(?![A-Za-z0-9]+$)(?![a-z0-9#?!@$%^&*-.]+$)(?![A-Za-z#?!@$%^&*-.]+$)(?![A-Z0-9#?!@$%^&*-.]+$)[a-zA-Z0-9#?!@$%^&*-.]{8,16}$/,
          }"
        />
        <span class="error-msg">{{ errors.first("password") }}</span>
      </div>
      <!--确定密码-->
      <div class="content">
        <label>确认密码:</label>
        <input
          type="text"
          placeholder="请输入确认密码"
          v-model="password1"
          name="password1"
          v-validate="{ required: true, is: password }"
        />
        <span class="error-msg">{{ errors.first("password1") }}</span>
      </div>
      <div class="controls">
        <input
          type="checkbox"
          v-model="agree"
          name="agree"
          v-validate="{ required: true, agree: true }"
        />
        <span>同意协议并注册《用户协议》</span>
        <span class="error-msg">{{ errors.first("agree") }}</span>
      </div>
      <div class="btn">
        <button @click="register">完成注册</button>
      </div>
    </div>


  </div>
</template>

<script>
export default {
  name: "Register",
  data() {
    return {
      //手机手机号
      phone: "",
      //手机验证码
      code: "",
      //密码
      password: "",
      //确认密码
      password1: "",
      //协议同意
      agree: true,
    };
  },
  methods: {
    //获取验证码按钮回调
    async getCode() {
      //获取手机号码
      const { phone } = this;
      //目前不做表单验证功能:保证手机号码十一位
      if (phone.length == 11) {
        try {
          //获取验证码成功
          await this.$store.dispatch("user/getCode", phone);
          this.code = this.$store.state.user.code;
        } catch (error) {
          alert("获取验证码失败");
        }
      }
    },
    //注册按钮
    async register() {
      //点击注册按钮的时候全部表单验证通过再去发请求
      const success = await this.$validator.validateAll();
      //success:返回是布尔值  真【全部字段验证通过】|假[只要有一个字段验证失败返回false]
      if (success) {
        try {
          //注册成功
          await this.$store.dispatch("user/register", {
            phone,
            code,
            password,
          });
          //跳转到登录页
          this.$router.push({ path: "/login" });
        } catch (error) {
          alert(error);
        }
      }else{
        alert('大兄弟好好看看,还有红色那');
      }
    },
  },
};
</script>