vue elementui form表单验证的实现


Posted in Javascript onNovember 11, 2018

最近我们公司将前端框架由easyui 改为 vue+elementui 。自学vue两周 就开始了爬坑之路。业余时间给大家分享一下心得,技术新手加上第一次分享(小激动),有什么不足的地方欢迎大家指正,多多交流才能共同进步!

1.问题 我们公司的项目比较大 表格 表单的页面都不胜数 ,基于此封装了一些 可复用的代码。

2.分析  vue给了我们不一样的前端代码体验  element ui 给我们一套功能强大的组件 减少了我们大量的开发时间 。双剑合璧 天下无敌!  但每个公司的代码风格不同  用户的要求也比较刁端 ui团队设计完美 我们怎样才能用这个两把剑闯出自己的江湖 就需要大家好好琢磨了。

废话不多说!进入正题

form表单验证规则的封装

1.ellementui的处理    1. Form 组件上一次性传递所有的验证规则  2 .单个的表单域上传递属性的验证规则 。

<el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
 <el-form-item
  prop="email"
  label="邮箱"
  :rules="[
   { required: true, message: '请输入邮箱地址', trigger: 'blur' },
   { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' }
  ]"
 >
 <el-input v-model="dynamicValidateForm.mobil"></el-input>
 </el-form-item>
 <el-form-item 
  label="姓名:" 
  prop="name" 
  :rules="[{ required: true, message: '请输入姓名', trigger: 'blur' }]">
 <el-input v-model="dynamicValidateForm.name"></el-input>
</el-form-item>
<el-form-item label="手机号:" prop="mobil" 
  :rules="filter_rules({required:true,type:'mobile'})">
  <el-input v-model="dynamicValidateForm.mobil"></el-input>
</el-form-item>

</el-form>

观察上面的代码 有一个共性 单个的表单域上传递属性的验证规则 ,给rules 属性一个数组

重点来了 19行代码是什么意思????

这就是我们封装的全局可复用的方法   传入需要的参数,你就可以得到你想要的验证规则 rules 数组

在我们的工具包建一个 js文件  我们的全局方法就有了

exports.install = function (Vue, options) {

  Vue.prototype.filter_rules = function (item){  
  
    return [{},{}]
    
   }
  

}

还要在main.js 中注册

vue elementui form表单验证的实现

下面分享下我的js文件

import { validateMoneyNumber,qq,mobile,regexn,integer} from '@/utils/validate'

exports.install = function (Vue, options) {
  
  
  /**
   * 注意: 定义type 规则时 不用做非空验证 
   *    只需要传入 required:true 即可
   * */
  /*保留两位小数*/
  const isvalidateMoney = (rule, value, callback) => {
    if(value != null && value != "") {
      if(!validateMoneyNumber(value)) {
      callback(new Error('请输入正确的数字,最多保留两位小数!'))
      } else {
        callback()
      }
    }
    else{
      callback();
    }
  }
  /*验证QQ号码*/
  const isvalidateQQ= (rule, value, callback) => {    
    if(value != null && value != "") {
      if(!qq(value)) {
        callback(new Error('您输入的QQ号不正确!'))
      } else {
        callback()
      }
    }
    else{
      callback();
    }
  }
  /*验证手机号*/
    const isvalidateMobile= (rule, value, callback) => {    
    if(value != null && value != "") {
      if(!mobile(value)) {
        callback(new Error('您输入的手机号不正确!'))
      } else {
        callback()
      }
    }
    else{
      callback();
    }
  }
    
    /*含有非法字符(只能输入字母、汉字)*/
    const isvalidateRegexn= (rule, value, callback) => {    
    if(value != null && value != "") {
      if(!regexn(value)) {
        callback(new Error('含有非法字符(只能输入字母、汉字)!'))
      } else {
        callback()
      }
    }
    else{
      callback();
    }
  }
    /*请输入正整数*/
    const isvalidateInteger= (rule, value, callback) => {    
    if(value != null && value != "") {
      if(!integer(value)) {
        callback(new Error('请输入正整数!'))
      } else {
        callback()
      }
    }
    else{
      callback();
    }
  }
  
  
  
  
  /**
   * 参数 item 
   * required true 必填项
   * maxLength 字符串的最大长度
   * min 和 max 必须同时给 min < max type=number
   * type 手机号 mobile
   *   邮箱  email
   *   网址  url 
   *   各种自定义类型  定义在 src/utils/validate 中  持续添加中.......
   * */
  
  Vue.prototype.filter_rules = function (item){
    let rules = [];
    if(item.required){
      rules.push({ required: true, message: '该输入项为必填项!', trigger: 'blur' });
    }
    if(item.maxLength){
      rules.push({ min:1,max:item.maxLength, message: '最多输入'+item.maxLength+'个字符!', trigger: 'blur' })
    }
    if(item.min&&item.max){    
      rules.push({ min:item.min,max:item.max, message: '字符长度在'+item.min+'至'+item.max+'之间!', trigger: 'blur' })
    }
    if(item.type){
      let type = item.type;
      switch(type) {
        case 'email':
          rules.push({ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' });
          break;
        case 'qq':
          rules.push( { validator: isvalidateQQ, trigger: 'blur,change' });
          break;
        case 'mobile':
          rules.push( { validator: isvalidateMobile, trigger: 'blur,change' });
          break;  
        case 'regexn':
          rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' });
          break;  
        case 'integer':
          rules.push( { validator: isvalidateInteger, trigger: 'blur,change' });
          break;    
        default:
          rule.push({});
          break;
      }
    }
    
   
    return rules;
  };
};

看明白了吗  第一行  是引入各种正则表达式   然后自定义校验规则    。  传入你自定义的参数 就可以拿到你想要的规则   (很熟悉吧  参考 easyui 表单验证)

下面是效果

vue elementui form表单验证的实现

ElementUi rules表单验证

  • 可以在pattern中书写正则,并且配合elementUI进行表单验证。
  • pattern 属性规定用于验证输入字段的模式。模式指的是正则表达式。
rules: {
  name:[{
    required: true,
    message: '请输入用户名',
    trigger: 'blur'
    },{
    min: 2,
    max: 5,
    message: '长度在 2 到 5 个字符'
    },{
    pattern: /^[\u4E00-\u9FA5]+$/,
    message: '用户名只能为中文'
  }
    //{ pattern:/^[a-zA-Z]w{1,4}$/, message: '以字母开头,长度在2-5之间, 只能包含字符、数字和下划线'}
  ],
  password: [{
    required: true,
    message: '请输入密码',
    trigger: 'blur'
  }, {
    min: 6,
    max: 30,
    message: '长度在 6 到 30 个字符'
  }, {
    pattern: /^(\w){6,20}$/,
    message: '只能输入6-20个字母、数字、下划线'
  }],
  mobile:[{ 
    required: true,
    message: '请输入手机号码',
    trigger: 'blur'
  },
  {validator:function(rule,value,callback){
      if(/^1[34578]\d{9}$/.test(value) == false){
        callback(new Error("请输入正确的手机号"));
      }else{
        callback();
      }
    }, trigger: 'blur'}
  ],
  //  pattern: /^1[34578]\d{9}$/, message: '目前只支持中国大陆的手机号码' }
  peopleID:[{
    required: true,
    message: '请输入身份证ID',
    trigger: 'blur'
    },{
      pattern:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/, message: '你的身份证格式不正确' 
    }
  ],
  carId:[
    {required: true, message: '请输入车牌号', trigger: 'blur'}, 
    {pattern:/(^[\u4E00-\u9FA5]{1}[A-Z0-9]{6}$)|(^[A-Z]{2}[A-Z0-9]{2}[A-Z0-9\u4E00-\u9FA5]{1}[A-Z0-9]{4}$)|(^[\u4E00-\u9FA5]{1}[A-Z0-9]{5}[挂学警军港澳]{1}$)|(^[A-Z]{2}[0-9]{5}$)|(^(08|38){1}[A-Z0-9]{4}[A-Z0-9挂学警军港澳]{1}$)/,
     message: '常规格式:晋B12345'},
  ],
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
javaScript复制功能调用实现方案
Dec 13 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
Jun 13 Javascript
text-align:justify实现文本两端对齐 兼容IE
Aug 19 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
Jan 27 Javascript
基于javascript实现页面加载loading效果
Sep 15 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 Javascript
JS匿名函数实例分析
Nov 26 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 #Javascript
浅谈webpack+react多页面开发终极架构
Nov 11 #Javascript
Vue项目引进ElementUI组件的方法
Nov 11 #Javascript
webpack中如何使用雪碧图的示例代码
Nov 11 #Javascript
vue组件从开发到发布的实现步骤
Nov 11 #Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 #Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 #Javascript
You might like
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
asp 取文本框名称代码
2008/12/02 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)
2013/06/03 HTML / CSS
英国探险旅游专家:Explore
2018/12/20 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
室内设计专业个人的自我评价
2013/12/18 职场文书
白血病捐款倡议书
2014/05/14 职场文书
暑假学习心得体会
2014/09/02 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
win7配置本地ftp服务器的图文教程
2022/08/05 Servers