在vue中使用rules对表单字段进行验证方式

目录
  • 1. 写在 data 中验证
    • 表单内容
    • data 数据
  • 2. 写在行内
    • 表单内容
  • 3. 引入外部定义的规则

vue 中表单字段验证的写法和方式有多种,本篇文章介绍三种较为常用的验证方式。

1. 写在 data 中验证

表单内容

<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="用户名称:" prop="userName">
       <el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/>
    </el-form-item>
</el-form>
  • <el-form>:代表这是一个表单
  • <el-form> -> ref:表单被引用时的名称,标识
  • <el-form> -> rules:表单验证规则
  • <el-form> -> model:表单数据对象
  • <el-form> -> label-width:表单域标签的宽度,作为 Form 直接子元素的 form-item 会继承该值
  • <el-form> -> <el-form-item>:表单中的每一项子元素
  • <el-form-item> -> label:标签文本
  • <el-form-item> -> prop:表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的
  • <el-input>:输入框
  • <el-input> -> v-model:绑定的表单数据对象属性
  • <el-input> -> style:行内样式
  • <el-input> -> maxlength:最大字符长度限制

data 数据

data() {
    return {
        // 省略别的数据定义
        ...

        // 表单验证
        formRules: {
            userName: [
                {required: true,message: "请输入用户名称",trigger: "blur"}
            ]
        }
    }
}
  • formRules:与上文  '表单内容' 中 <el-form> 表单的 :rules 属性值相同
  • userName:与上文 '表单内容' 中 <el-form-item> 表单子元素的 prop 属性值相同
  • 验证内容是:必填,失去焦点时验证,如果为空,提示信息为 '请输入用户名称'

2. 写在行内

表单内容

<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="银行名称:" prop="accountName" :rules="[{required:true,message:'请输入银行名称',trigger:'blur'}]">
        <el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
    </el-form-item>
</el-form>
  • <el-form-item> -> rules:和第一种方式表现的效果一致,只是写法不一样,这里不再赘述

data 数据没有内容

3. 引入外部定义的规则

表单内容

<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="银行卡号:" prop="accountNumber">
       <el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="19"/>
    </el-form-item>
</el-form>

表单内容与第一种方式写法一致,这里不再赘述

script 内容

<script>
// 引入了外部的验证规则
import { validateAccountNumber } from "@/utils/validate";

// 判断银行卡账户是否正确
const validatorAccountNumber = (rule, value, callback) => {
  if (!value) {
    return callback(new Error("请输入账户信息"));
  } else {
    if (validateAccountNumber(value)) {
      callback();
    } else {
      return callback(new Error('账号格式不正确'))
    }
  }
};

export default {
    data() {
        return {
            // 省略别的数据定义
            ...

            // 表单验证
            formRules: {
                accountNumber: [
                    {required: true,validator: validatorAccountNumber,trigger: "blur"}
                ]
            }
        }
    }
}
</script>
  • import:先引入了外部的验证规则
  • const:定义一个规则常量,常量名可变, '= (rule, value, callback) => {}' 为固定格式,value 入参为验证的字段值
  • formRules -> accountNumber:表单验证中使用 validator 指定自定义校验规则常量名称

validate.js

/* 银行账户 */
export function validateAccountNumber(str) {
  const reg = /^([1-9]{1})(\d{14}|\d{18})$/
  return reg.test(str)
}

验证规则

以上都是在失去焦点时的验证,下面来分析一下如何在表单提交时验证

1. 表单的提交按钮

<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item>
        <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
        <el-button @click="cancel">取消</el-button>
    </el-form-item>
</el-form>
  • <el-button>:按钮
  • <el-button> -> type:按钮类型
  • <el-button> -> @click:按钮点击时触发的事件,这里注意方法的入参为 'rulesForm',这里要与 <el-form> 表单的 rel 属性值一致

2. methods 方法

methods: {
    // 保存
    onSubmit(formName) {
        this.$refs[formName].validate(valid => {
            if (valid) {
                console.log("success submit!!");
            }else{
                console.log("error submit!!");
            }
        });
    },
    // 取消
    cancel() {

    }
}

this.$refs[formName].validate:formName 就是传入的 'rulesForm',与 <el-form> 表单的 rel 属性值一致,这样就指定好需要验证的表单了

完整示例代码如下

1. rules.vue

<template>
  <div class="app-container">
    <el-tabs v-model="activeName">
      <el-tab-pane label="表单" name="rulesPane" @tab-click="handleClick">
        <!-- 表单 -->
        <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
          <el-form-item label="用户名称:" prop="userName">
            <el-input v-model="rulesForm.userName" style="width:300px" maxlength="50"/>
          </el-form-item>
          <el-form-item label="银行名称:" prop="accountName" :rules="[{required:true,message:'请输入银行名称',trigger:'blur'}]">
            <el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
          </el-form-item>
          <el-form-item label="银行卡号:" prop="accountNumber">
            <el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="50"/>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
            <el-button @click="cancel">取消</el-button>
          </el-form-item>
        </el-form>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>
<script>
import { validateAccountNumber } from "@/utils/validate";
 
// 判断银行卡账户是否正确
const validatorAccountNumber = (rule, value, callback) => {
  if (!value) {
    return callback(new Error("请输入账户信息"));
  } else {
    if (validateAccountNumber(value)) {
      callback();
    } else {
      return callback(new Error('账号格式不正确'))
    }
  }
};
 
export default {
  name: "rules",
  data() {
    return {
      activeName: "rulesPane",
      defaultProps: {
        children: "children",
        label: "label"
      },
      rulesForm: {
      },
      //   表单验证
      formRules: {
        userName: [
          {
            required: true,
            message: "请输入用户名称",
            trigger: "blur"
          }
        ],
        accountNumber: [
          {
            required: true,
            validator: validatorAccountNumber,
            trigger: "blur"
          }
        ],
      }
    };
  },
  created() {},
  mounted() {},
  methods: {
    handleClick(tab) {
      
    },
    // 取消
    cancel() {
      
    },
    // 保存
    onSubmit(formName) {
      this.$refs[formName].validate(valid => {
        if (valid) {
          console.log("success submit!!");
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    }
  }
};
</script>
 
<style lang="scss">
</style>

2. validate.js

/* 银行账户 */
export function validateAccountNumber(str) {
  const reg = /^([1-9]{1})(\d{14}|\d{18})$/
  return reg.test(str)
}

效果图

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue 使用rules对表单字段进行校验的步骤

    在实际开发过程中,发现以下的写法比较累赘,因为在后面的项目中,继续优化表单验证的方法,让代码更简洁.主要的修改是验证方法的修改和调用 以前验证表单字段的最大长度,description: [{ max: 200, message: '最大长度为200个字符', trigger: 'blur' }] 现在写法:description: [validateLen(200)] 其中,validateLen是我封装的一个方法. 使用步骤: 1.在uitls文件夹中新建一个validate.js文件. 2

  • vue使用rules实现表单字段验证

    vue 中表单字段验证的写法和方式有多种,本博客介绍三种较为常用的验证方式. 1. 写在 data 中验证 表单内容 <!-- 表单 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px"> <el-form-item label="用户名称:" prop=&q

  • 详解vue如何使用rules对表单字段进行校验

    1.在代码中,添加属性::rule <Form ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit" class="form-con"> <FormItem prop="phone"> <Input v-model="form.phone&

  • Vue表单验证插件Vue Validator使用方法详解

    Vue-validator 是Vue的表单验证插件,供大家参考,具体内容如下 Vue版本: 1.0.24 Vue-validator版本: 2.1.3 基本使用 <div id="app"> <validator name="validation"> <form novalidate> <div class="username-field"> <label for="username

  • 在vue中使用rules对表单字段进行验证方式

    目录 1. 写在 data 中验证 表单内容 data 数据 2. 写在行内 表单内容 3. 引入外部定义的规则 vue 中表单字段验证的写法和方式有多种,本篇文章介绍三种较为常用的验证方式. 1. 写在 data 中验证 表单内容 <!-- 表单 --> <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px&

  • Vue中常用rules校验规则(实例代码)

    在 vue开发中,难免遇到各种表单校验,这里整理了网络上和自己平时高频率用到的一些校验方法.如果错误欢迎指出,后期不断补充更新. 1.是否合法IP地址 export function validateIP(rule, value,callback) { if(value==''||value==undefined||value==null){ callback(); }else { const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|

  • 详谈vue中的rules表单验证(常用)

    目录 首先在表单中绑定rules 并在item中定义属性prop 在data或computed中编写rules规则 其中name为prop名 也可以直接用pattern进行匹配验证 前端Vue中常用rules校验规则 首先在表单中绑定rules 并在item中定义属性prop <el-form :model="ruleForm" :rules="rules" ref="ruleForm">   <el-form-item lab

  • 前端Vue中常用rules校验规则详解

    目录 1.是否合法IP地址 2.是否手机号码或者固话 3.是否固话 4.是否手机号码 5.是否身份证号码 6.是否邮箱 7.合法url 8.验证内容是否包含英文数字以及下划线 9.自动检验数值的范围 10.验证数字输入框最大数值 11.验证是否1-99之间 12.验证是否整数 13.验证是否整数,非必填 14. 验证是否是[0-1]的小数 15. 验证是否是[1-10]的小数,即不可以等于0 16.验证是否是[1-100]的小数,即不可以等于0 17.验证是否是[0-100]的小数 18.验证端

  • 使用vue中的混入mixin优化表单验证插件问题

    这段时间开发的时候使用到了这个表单校验插件,用起来比较麻烦就不说了,还有较严重的缺陷.自己最终还是抽空把这个插件进行了一些优化,虽然优化的方式和当初自己定下的方向不怎么相同,但是就使用体验上来说还是提高了很多. 1. 实际开发中遇到的问题 在上面的文章中提及了一些表单插件的问题,主要针对的是插件开发本身存在的问题.下面我总结下使用中存在的问题: 每个使用表单校验的元素都需要添加 v-check 类名,比较麻烦. 必须在提交表单按钮上使用 v-checkSubmit 指令进行表单校验,提交函数必须

  • django-xadmin根据当前登录用户动态设置表单字段默认值方式

    相信你一定会设置一个普通字段的默认值: class Offer(models.Model): salary = models.CharField(max_length=64, blank=True, default='6000', verbose_name='薪资待遇') 相信你还能动态设置外键字段的默认值: class Interview(models.Model): department = models.ForeignKey('departments.Department', relate

  • Vue 中可以定义组件模版的几种方式

    前端组件化开发已经是一个老生常谈的话题了,组件化让我们的开发效率以及维护成本带来了质的提升. 当然因为现在的系统越来越复杂庞大,所以开发与维护成本就变得必须要考虑的问题,因此滋生出了目前的三大前端框架 Vue.Angular.React. 那今天我们就来看看 Vue 中有哪些定义组件模版的方式以及他们之间的一些差别. 字符串形式 Vue 最简单直接的一种定义组件模版的方式,但是方式写起来很不友好,就像我们以前拼接 HTML 元素是一样的,很痛苦,所以我们并不常用 Vue.component("m

  • 基于vue中对鼠标划过事件的处理方式详解

    鼠标事件进行监听 需求中,在一个table(组件)表中,对于其中一列(该列为图片列),当鼠标划过该列的某个单元格子(图片)时,需要展示出该单元格子对应的遮罩层 翻阅了一些博客,发现好多都提到了mouse事件,如mouseover.mouseout.mouseenter.mouseleave,在之后我自己也通过这种方法进行了尝试. <template> <el-table :data="tableData" stripe style="width: 100%&

随机推荐