vue实现表单数据验证的实例代码

  • 为el-form表单添加:rules
  • 在data中定义规则
  • 将定义的规则绑定在el-form-item

代码如下:

<!--登录表单区域-->
  <el-form :model="loginForm" label-width="0px" class="login_form" :rules="loginFormRules">
  <!--用户名-->
   <el-form-item prop="username">
    <el-input v-model="loginForm.username" prefix-icon="el-icon-user"></el-input>
  </el-form-item>
  <!--密码-->
  <el-form-item prop="password">
    <el-input v-model="loginForm.password" prefix-icon="el-icon-lock" type="password"></el-input>
  </el-form-item>
  <!--按钮区域-->
  <el-form-item class="btns">
    <el-button type="primary">登录</el-button>
    <el-button type="info">重置</el-button>
  </el-form-item>
  </el-form>
<script>
 export default{
 data(){
  return {
  //登录表单数据绑定对象
  loginForm:{
   username:'',
   password:''
  },
  //表单验证规则
  loginFormRules:{
   //验证用户名是否合法
   username:[
   { required: true, message: '请输入用户名', trigger: 'blur' },
   { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
   ],
   //验证密码是否合法
   password:[
   { required: true, message: '请输入密码', trigger: 'blur' },
   { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
   ]
  }
  }
 }
 }
</script>

PS:下面看下vue 自定义指令input表单的数据验证的代码

一、代码

<template>
  <div class="check" >
    <h3>{{msg}}</h3>
    <div class="input">
      <input type="text" v-input v-focus><span>{{msg1}}</span>
    </div>
    <div class="input">
      <input type="text" v-input v-required><span>{{msg2}}</span>
    </div>
    <div class="input">
      <!-- required:true/false 表示这个是必填项 -->
      <input type="text" v-input v-checked="{required:true,}"><span>{{msg3}}</span>
    </div>
    <div class="input">
      <!-- <input type="text" v-input v-validate="'required|email|phone|min(5)|max(15)|minlength(6)|maxlength(12)|regex(/^[0-9]*$/)'">
      required 验证是否是必填项
      email 验证是否是邮箱
      phone 验证是否是电话号码
      min(5) 验证最小值
      max(3) 验证最大值
      minlength(6) 验证最小长度
      maxlength(12) 验证最大长度
      regex(/^[0-9]*$/) 进行正则验证
      -->
      <input type="text" v-input
          v-validate="'required|min(5)|max(15)|minlength(6)|maxlength(12)|regex(/^[0-9]*$/)'" placeholder="多选验证">
    </div>
    <div class="input">
      <!--
      验证必须是数字:/^[0-9]*$/
      验证由26个英文字母组成的字符串:/^[A-Za-z]+$/
      验证手机号: /^[1][3,4,5,7,8][0-9]{9}$/;
      验证邮箱:/^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
      -->
      <input type="text" v-input v-validate="'required|phone'" placeholder="验证手机号码">
    </div>
    <div class="input">
      <input type="text" v-input v-validate="'required|email'" placeholder="验证邮箱">
    </div>
  </div>
</template>

<script>
  export default {
    name: 'check',
    data() {
      return {
        msg: '指令',
        tipsBorderColor: 'red',
        msg1: '最简单的指令',
        msg2: '验证不能为空的指令',
        msg3: '进行正则验证',
        tipsMsg: '',
      }
    },

    directives: {
      // 修饰input框的指令
      input: {
        // 当被绑定的元素插入到DOM上的时候
        inserted: function (el) {
          el.style.width = "300px";
          el.style.height = "35px";
          el.style.lineHeight = "35px";
          el.style.background = "#ddd";
          el.style.fontSize = "16px";
          el.style.border = "1px solid #eee";
          el.style.textIndent = "5px";
          el.style.textIndent = "8px";
          el.style.borderRadius = "5px";
        }
      },
      // input框默认选中的指令
      focus: {
        inserted: function (el) {
          el.focus();
        }
      },
      // 不能为空的指令
      required: {
        inserted: function (el) {
          el.addEventListener('blur', function () {
            if (el.value == '' || el.value == null) {
              el.style.border = "1px solid red";
              console.log('我不能为空');
            }

          })
        }
      },
      // 验证指令
      checked: {
        inserted: function (el) {
          return el
        }
      },
      // 验证
      validate: {
        inserted: function (el, validateStr) {
          // 将验证规则拆分为验证数组
          let validateRuleArr = validateStr.value.split("|");
          // 监听失去焦点的时候
          el.addEventListener('blur', function () {
            //失去焦点进行验证
            checkedfun();
          });

          // 循环进行验证
          function checkedfun() {
            for (var i = 0; i < validateRuleArr.length; ++i) {
              let requiredRegex = /^required$/; // 判断设置了required
              let emailRegex = /^email$/; // 判断设置了email
              let phoneRegex = /^phone$/; // 判断设置了 phone
              let minRegex = /min\(/; //判断设置了min 最小值
              let maxRegex = /max\(/; //判断设置了max 最大值
              let minlengthRegex = /minlength\(/; //判断设置了 minlength 最大长度
              let maxlengthRegex = /maxlength\(/; //判断设置了 maxlength 最大长度
              let regexRegex = /regex\(/;
              // 判断设置了required
              if (requiredRegex.test(validateRuleArr[i])) {
                if (!required()) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断设置了email
              if (emailRegex.test(validateRuleArr[i])) {
                if (!email()) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断设置了 phone
              if (phoneRegex.test(validateRuleArr[i])) {
                if (!phone()) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断是否设置了最小值
              if (minRegex.test(validateRuleArr[i])) {
                if (!eval(validateRuleArr[i])) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断是否设置了最大值
              if (maxRegex.test(validateRuleArr[i])) {
                if (!eval(validateRuleArr[i])) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断设置了最小长度
              if (minlengthRegex.test(validateRuleArr[i])) {
                if (!eval(validateRuleArr[i])) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断设置了最大长度
              if (maxlengthRegex.test(validateRuleArr[i])) {
                if (!eval(validateRuleArr[i])) {
                  break;
                } else {
                  removeTips();
                }

              }

              // 判断测试正则表达式
              if (regexRegex.test(validateRuleArr[i])) {
                if (!eval(validateRuleArr[i])) {
                  break;
                } else {
                  removeTips();
                }

              }

            }

          }

          // 验证是否是必填项
          function required() {
            if (el.value == '' || el.value == null) {
              // console.log("不能为空");
              tipMsg("不能为空");
              return false;
            }

            return true;
          }

          // 验证是否是邮箱
          function email() {
            let emailRule = /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/;
            if (!emailRule.test(el.value)) {
              tipMsg("请输入正确的邮箱地址");
              return false;
            }

            return true;
          }

          // 验证是否是手机号码
          function phone() {
            let phoneRule = /^[1][3,4,5,7,8][0-9]{9}$/;
            if (!phoneRule.test(el.value)) {
              tipMsg("请输入正确的手机号码");
              return false;
            }

            return true;
          }

          // 最小值验证
          function min(num) {
            if (el.value < num) {
              tipMsg("最小值不能小于" + num);
              //console.log('最小值不能小于'+num);
              return false;
            }

            return true;
          }

          // 最大值验证
          function max(num) {
            if (el.value > num) {
              tipMsg("最大值不能大于" + num);
              //console.log('最大值不能大于'+num);
              return false;
            }

            return true;
          }

          // 最小长度验证
          function minlength(length) {
            if (el.value.length < length) {
              //console.log('最小长度不能小于'+length);
              tipMsg("最小长度不能小于" + length);
              return false;
            }

            return true;
          }

          // 最大长度进行验证
          function maxlength(length) {
            if (el.value.length > length) {
              //console.log('最大长度不能大于'+length);
              tipMsg("最大长度不能大于" + length);
              return false;
            }
            return true;
          }

          // 进行正则表达式的验证
          function regex(rules) {
            if (!rules.test(el.value)) {
              tipMsg("请输入正确的格式");
              return false;
            }
            return true;
          }

          // 添加提示信息
          function tipMsg(msg) {
            removeTips();
            let tipsDiv = document.createElement('div');
            let curDate = Date.parse(new Date());
            tipsDiv.innerText = msg;
            tipsDiv.className = "tipsDiv";
            tipsDiv.id = curDate;
            tipsDiv.style.position = "absolute";
            tipsDiv.style.top = el.offsetTop + 45 + 'px';
            tipsDiv.style.left = el.offsetLeft + 'px';
            document.body.appendChild(tipsDiv);
            //setTimeout(function(){
            // document.getElementById(curDate).remove();
            //},2000);
          }

          // 移除提示信息
          function removeTips() {
            if (document.getElementsByClassName('tipsDiv')[0]) {
              document.getElementsByClassName('tipsDiv')[0].remove();
            }

          }
        },
      }
    }
  }
</script>

<style>

  .input {
    padding-bottom: 20px;
    float: left;
    clear: both;
    margin-left: 500px;
    display: block;

  }

  .check input {
    width: 300px;
    height: 35px;
    outline: none;
    background: #ddd;
  }

  .check span {
    padding-left: 20px;
  }

  .tipsDiv {
    height: 27px;
    line-height: 25px;
    border: 1px solid #333;
    background: #333;
    padding: 0px 5px;
    border-radius: 4px;
    color: #fff;
    font-size: 16px;
  }

  .tipsDiv:before {
    content: '';
    display: block;
    border-width: 0 5px 8px;
    border-style: solid;
    border-color: transparent transparent #000;
    position: absolute;
    top: -9px;
    left: 6px;
  }
</style>

总结

到此这篇关于vue实现表单数据验证的实例代码的文章就介绍到这了,更多相关vue 表单数据验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue组件表单数据回显验证及提交的实例代码

    最近项目需要到vue开发单页面,所以就研究一下表单数据的回显,验证及提交如何用vue组件的方式实现. 代码如下: <template> <div class="index"> <!--header-bar></header-bar--> <div style="margin:20px;"> <div class="item"> <p>住户名称:</p>

  • Vue.js组件props数据验证实现详解

    本文实例为大家分享了Vue.js组件props数据验证的具体代码,供大家参考,具体内容如下 数据验证 一般当组件需要提供给别人使用时,就需要使用数据验证. 示例: <script> Vue.component('my-component',{ props:{ //必须是数字类型 propA: Number, //必须是字符串或数字类型 propB:[String, Number], //布尔值,如果没有定义,默认值就是true propC:{ type: Boolean, default: t

  • vue+elementUI 复杂表单的验证、数据提交方案问题

    当我们在做后台管理系统时,经常会遇到非常复杂的表单: 表单项非常多 在各种表单类型下,显示不同的表单项 在某些条件下,某些表单项会关闭验证 每个表单项还会有其他自定义逻辑,比如 输入框可以插入模板变量.输入字符数量显示.图片上传并显示.富文本 ... 在这种错综复杂的情况下,完成表单的验证和提交 可以查看具体例子:例子中省略了很多琐碎的功能,只保留整体的复杂表单框架,用于展示解决方案 方案1: 在一个 vue 文件中 所有的表单项显示隐藏.验证.数据获取.提交.自定义等逻辑放在一起 v-if/v

  • vue实现表单数据验证的实例代码

    为el-form表单添加:rules 在data中定义规则 将定义的规则绑定在el-form-item 代码如下: <!--登录表单区域--> <el-form :model="loginForm" label-width="0px" class="login_form" :rules="loginFormRules"> <!--用户名--> <el-form-item prop=&q

  • vue elementUI 表单嵌套验证的实例代码

    一:表单一级验证 element中from组件内表单验证通过使用el-form标签,绑定model和rules属性进行表单验证 <el-form ref="form" :model="form" :rules="rules" label-width="110px" @submit.native.prevent> <el-form-item label="客户名称:" size="

  • vue elementui el-form rules动态验证的实例代码详解

    一.介绍 简介:在使用elementUI el-form 中,对于业务不同的时候可能会产生不同表单结构,但是都是存在同一个表单控件el-form中. 图片介绍: 1.在用户选择单选或多选时会有A,B,C,D,E五个选项 2.在用户选择简答题时只会题干,答案以及解析选项(主要是通过v-if来进行判断) 问题引入:当用户选择不同的题库时会产生不同的form表单选项,这个时候在进行表单提交验证的时候就需要根据不同试题类型进行判断,这个时候就需要两个rules来动态进行表单校验. 解决方法:在页面加载的

  • laravel5表单唯一验证的实例代码

    记录一下关于laravel5的unique验证: 1.路由: Route::resource('/users', 'UsersController'); 2.Request: public function rules() { return [ 'email' => 'required|unique:users,email,' . $this->route('user')->id, 'username' => 'required', ]; } 3.控制器 public functi

  • Spring学习笔记2之表单数据验证、文件上传实例代码

    在上篇文章给大家介绍了Spring学习笔记1之IOC详解尽量使用注解以及java代码,接下来本文重点给大家介绍Spring学习笔记2之表单数据验证.文件上传实例代码,具体内容,请参考本文吧! 一.表单数据验证 用户注册时,需要填写账号.密码.邮箱以及手机号,均为必填项,并且需要符合一定的格式.比如账号需要32位以内,邮箱必须符合邮箱格式,手机号必须为11位号码等.可以采用在注册时验证信息,或者专门写一个工具类用来验证:来看下在SpringMVC中如何通过简单的注释实现表单数据验证. 在javax

  • vue中使用element-ui进行表单验证的实例代码

    element-ui 中验证 一.简单逻辑验证(直接使用rules) 实现思路 •html中给el-form增加 :rules="rules" •html中在el-form-item 中增加属性 prop="名称" •js中直接在data中定义rules:{} •html部分 <el-form ref="form" :rules="rules" :model="form" label-width=&q

  • VUE v-model表单数据双向绑定完整示例

    本文实例讲述了VUE v-model表单数据双向绑定.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Vue v-model双向绑定</title> <script src="https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></s

  • Vue自定义表单内容检查rules实例

    先看个例子 组件 <el-form-item label="手机号:" prop="phone_number"> <el-input v-model="formPerson.phone_number"></el-input> </el-form-item> script中 export default { data() { var validateMobilePhone = (rule, value

  • vue实现表单数据的增删改功能

    本文实例为大家分享了vue实现表单数据增删改功能的具体代码,供大家参考,具体内容如下 图示如下: <!DOCTYPE html> <html lang="en">   <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0&qu

  • Vue 收集表单数据方法详情

    表单收集数据代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue初识</title> <script type="text/javascript" src="./js/vue.js"></script> </head>

随机推荐