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


Posted in Vue.js onDecember 25, 2020

在实际开发过程中,发现以下的写法比较累赘,因为在后面的项目中,继续优化表单验证的方法,让代码更简洁。主要的修改是验证方法的修改和调用

以前验证表单字段的最大长度,description: [{ max: 200, message: '最大长度为200个字符', trigger: 'blur' }]

现在写法:description: [validateLen(200)]

其中,validateLen是我封装的一个方法。

使用步骤:

1、在uitls文件夹中新建一个validate.js文件。

2、定义需要验证的方法

3、在需要使用的页面中引入import { validateLen, validateChart_ } from '@/utils/validate'

4、在用于校验的rules中使用。例如:description: [validateLen(200)]

具体写法:参考如下。只是把旧的写法统一封装成了return 进行输出。少写很多代码,省事整洁

// 是否必填
export function validateNecessary(tipInfo = '请输入', trigger = 'blur', isNeces = true,) {
 return {
  required: isNeces,
  message: tipInfo,
  trigger
 }
}

// 验证最大长度
export function validateLen(len = 20) {
 return {
  max: len,
  message: '最大长度为' + len + '个字符',
  trigger: 'blur'
 }
}

基于element-ui

1、在代码中,添加属性::rule

<el-form :model="form" :rules="rules" ref="form" label-width="150px"></el-form>

并且,在<el-form-item>中添加prop属性,对应rules中的规则

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

2、新开一个文件夹(validate.js)定义验证规则

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

3、在页面(index.vue)中引入验证规则定义的文件,并在export default中定义rule规则,使用语法:{validator:验证方法,trigger:验证触发}

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

4、以下是validator.js文件的部分验证方法

/*是否合法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}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
  if ((!reg.test(value)) && value != '') {
   callback(new Error('请输入正确的IP地址'));
  } else {
   callback();
  }
 }
}

/* 是否手机号码或者固话*/
export function validatePhoneTwo(rule, value, callback) {
 const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
 if (value == '' || value == undefined || value == null) {
  callback();
 } else {
  if ((!reg.test(value)) && value != '') {
   callback(new Error('请输入正确的电话号码或者固话号码'));
  } else {
   callback();
  }
 }
}
/* 是否固话*/
export function validateTelphone(rule, value,callback) {
 const reg =/0\d{2}-\d{7,8}/;
 if(value==''||value==undefined||value==null){
  callback();
 }else {
  if ((!reg.test(value)) && value != '') {
   callback(new Error('请输入正确的固话(格式:区号+号码,如010-1234567)'));
  } else {
   callback();
  }
 }
}
/* 是否手机号码*/
export function validatePhone(rule, value,callback) {
 const reg =/^[1][3,4,5,7,8][0-9]{9}$/;
 if(value==''||value==undefined||value==null){
  callback();
 }else {
  if ((!reg.test(value)) && value != '') {
   callback(new Error('请输入正确的电话号码'));
  } else {
   callback();
  }
 }
}
/* 是否身份证号码*/
export function validateIdNo(rule, value,callback) {
 const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
 if(value==''||value==undefined||value==null){
  callback();
 }else {
  if ((!reg.test(value)) && value != '') {
   callback(new Error('请输入正确的身份证号码'));
  } else {
   callback();
  }
 }
}
/* 是否邮箱*/
export function validateEMail(rule, value,callback) {
 const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
 if(value==''||value==undefined||value==null){
  callback();
 }else{
  if (!reg.test(value)){
   callback(new Error('请输入正确的邮箱地址'));
  } else {
   callback();
  }
 }
}
/* 合法uri*/
export function validateURL(textval) {
 const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
 return urlregex.test(textval);
}

/*验证内容是否英文数字以及下划线*/
export function isPassword(rule, value, callback) {
 const reg =/^[_a-zA-Z0-9]+$/;
 if(value==''||value==undefined||value==null){
  callback();
 } else {
  if (!reg.test(value)){
   callback(new Error('密码仅由英文字母,数字以及下划线组成'));
  } else {
   callback();
  }
 }
}

/*自动检验数值的范围*/
export function checkMax20000(rule, value, callback) {
 if (value == '' || value == undefined || value == null) {
  callback();
 } else if (!Number(value)) {
  callback(new Error('请输入[1,20000]之间的数字'));
 } else if (value < 1 || value > 20000) {
  callback(new Error('请输入[1,20000]之间的数字'));
 } else {
  callback();
 }
}

//验证数字输入框最大数值,32767
export function checkMaxVal(rule, value,callback) {
 if (value < 0 || value > 32767) {
  callback(new Error('请输入[0,32767]之间的数字'));
 } else {
  callback();
 }
}
//验证是否1-99之间
export function isOneToNinetyNine(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入正整数'));
  } else {
   const re = /^[1-9][0-9]{0,1}$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入正整数,值为【1,99】'));
   } else {
    callback();
   }
  }
 }, 0);
}

// 验证是否整数
export function isInteger(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入正整数'));
  } else {
   const re = /^[0-9]*[1-9][0-9]*$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入正整数'));
   } else {
    callback();
   }
  }
 }, 0);
}
// 验证是否整数,非必填
export function isIntegerNotMust(rule, value, callback) {
 if (!value) {
  callback();
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入正整数'));
  } else {
   const re = /^[0-9]*[1-9][0-9]*$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入正整数'));
   } else {
    callback();
   }
  }
 }, 1000);
}

// 验证是否是[0-1]的小数
export function isDecimal(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入[0,1]之间的数字'));
  } else {
   if (value < 0 || value > 1) {
    callback(new Error('请输入[0,1]之间的数字'));
   } else {
    callback();
   }
  }
 }, 100);
}

// 验证是否是[1-10]的小数,即不可以等于0
export function isBtnOneToTen(rule, value, callback) {
 if (typeof value == 'undefined') {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入正整数,值为[1,10]'));
  } else {
   if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) {
    callback(new Error('请输入正整数,值为[1,10]'));
   } else {
    callback();
   }
  }
 }, 100);
}
// 验证是否是[1-100]的小数,即不可以等于0
export function isBtnOneToHundred(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入整数,值为[1,100]'));
  } else {
   if (value < 1 || value > 100) {
    callback(new Error('请输入整数,值为[1,100]'));
   } else {
    callback();
   }
  }
 }, 100);
}
// 验证是否是[0-100]的小数
export function isBtnZeroToHundred(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (!Number(value)) {
   callback(new Error('请输入[1,100]之间的数字'));
  } else {
   if (value < 0 || value > 100) {
    callback(new Error('请输入[1,100]之间的数字'));
   } else {
    callback();
   }
  }
 }, 100);
}

// 验证端口是否在[0,65535]之间
export function isPort(rule, value, callback) {
 if (!value) {
  return callback(new Error('输入不可以为空'));
 }
 setTimeout(() => {
  if (value == '' || typeof(value) == undefined) {
   callback(new Error('请输入端口值'));
  } else {
   const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入在[0-65535]之间的端口值'));
   } else {
    callback();
   }
  }
 }, 100);
}
// 验证端口是否在[0,65535]之间,非必填,isMust表示是否必填
export function isCheckPort(rule, value, callback) {
 if (!value) {
  callback();
 }
 setTimeout(() => {
  if (value == '' || typeof(value) == undefined) {
   //callback(new Error('请输入端口值'));
  } else {
   const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
   const rsCheck = re.test(value);
   if (!rsCheck) {
    callback(new Error('请输入在[0-65535]之间的端口值'));
   } else {
    callback();
   }
  }
 }, 100);
}

/* 小写字母*/
export function validateLowerCase(str) {
 const reg = /^[a-z]+$/;
 return reg.test(str);
}
/*保留2为小数*/
export function validatetoFixedNew(str) {
 return str ;
}
/* 验证key*/
// export function validateKey(str) {
//   var reg = /^[a-z_\-:]+$/;
//   return reg.test(str);
// }

/* 大写字母*/
export function validateUpperCase(str) {
 const reg = /^[A-Z]+$/;
 return reg.test(str);
}

/* 大小写字母*/
export function validatAlphabets(str) {
 const reg = /^[A-Za-z]+$/;
 return reg.test(str);
}

以上就是vue 使用rules对表单字段进行校验的步骤的详细内容,更多关于vue 用rules对表单字段进行校验的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
Vue Element UI自定义描述列表组件
May 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
Vue如何清空对象
Mar 03 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 #Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 #Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 #Vue.js
vue3使用vue-count-to组件的实现
Dec 25 #Vue.js
vue+openlayers绘制省市边界线
Dec 24 #Vue.js
vue项目中openlayers绘制行政区划
Dec 24 #Vue.js
Vue+penlayers实现多边形绘制及展示
Dec 24 #Vue.js
You might like
php 定界符格式引起的错误
2011/05/24 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
js实时监听文本框状态的方法
2011/04/26 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
解读ES6中class关键字
2017/11/20 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
2018/05/23 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
生产副总岗位职责
2013/11/28 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
碧霞祠导游词
2015/02/09 职场文书
公司内部升职自荐信
2015/03/27 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android