vue中使用vee-validator完成表单校验方案


Posted in Javascript onNovember 01, 2019

前言

由于大部分移动端的组件库都不提供表单校验,因此需要自己封装。目前,使用较多的是async-validator和vee-validator。其中,elementUI组件库提供的表单验证也是基于async-validator,vee-validator是一种基于vue模板的轻量级校验框架。可以根据项目的需求,自行选择合适的方案。本文主要讨论的是vee-validator校验方案。

表单校验的封装

在vue项目中,表单校验是每个前端开发人员都避免不了的需求。校验的好处可以避免无用的 http 请求,及校验不通过不发送请求,也可以提高用户的体验效果。

安装

npm install vee-validate --save

引入

一般我们会在 src 目录下新建一个文件夹,里面新建一个 validator.js 和 validatorRule.js 文件。 validator.js 文件用来引入我们的 vee-validtor , validatorRule.js 文件用来定义校验的规则,当然还需要在main.js中注册,如果使用国际化组件。

main.js 文件配置

import VueI18n from 'vue-i18n' // 国际化插件
import {Validator} from 'vee-validate' // 表单校验组件
let language = 'zh_CN'

Vue.use(VueI18n)
Validator.locale = language
const i18n = new VueI18n({
 locale: language,
 messages
})

new Vue({
 i18n
})

validator.js 文件中引入

import Vue from 'vue'
import VeeValidate from 'vee-validate'// 全局注册
Vue.use(VeeValidate)

规则设置

vee-validator 默认是不自动导入提示语言包,所以得自己导入,一般只需要中文文件,但是还有一些需求是要支持国际化,所以要导入中英文插件。

// 引入中文文件
import zhCN from 'vee-validate/dist/locale/zh_CN'
// 引入英文文件
import en from 'vee-validate/dist/locale/en'

// 添加中文校验规则设置
Validator.localize('zh_CN', {
 // 提示语
 messages: zhCN.messages,
 // 提示语的信息在此设置,下面会提到
 attributes: attributesCh
})
// 添加英文校验规则设置
Validator.localize('en', {
 messages: en.messages,
 attributes: attributesEn
})

自定义规则

下面封装方法实现校验,其中

  • validName
  • errMsgZh
  • errMsgEn
  • validate

但大多数时候,推荐使用正则表达式,正则实则不了的,再去做特殊处理

export function setMessage(validName, errMsgZh, errMsgEn, validate) {
 Validator.locale = 'en'
 自定义验证规则,取名为validName, 通过该方式使用v-validate="'required|phone'"
 Validator.extend(validName, {
 // 提示信息,不符合规则提示语
 getMessage: (field, [args]) => {
  return errMsgEn
 },
 // 验证规则,符合规则通过,否则不通过 (规则为美国电话号码)
 validate: validate
 })
 Validator.locale = 'zh_CN'
 Validator.extend(validName, {
 getMessage: (field, [args]) => {
  return errMsgZh
 },
 validate: validate
 })
}

规则方法应用

validatorRule.js 中引入方法,定义具体的校验规则,下面只列举两种规则,其他校验规则可自行百度。

import {setMessage} from '../validate'

setMessage('phoneNum', '手机号不正确', 'phoneNum error', (value, [args]) => {
 const reg = /^((13|14|15|17|18)[0-9]{1}\d{8})$/
 return reg.test(value)
})
setMessage('personName', '姓名只能包括中文字或英文字母', 'username no yes', (value, [args]) => {
 const reg = /^([\u4e00-\u9fa5\s]|[a-zA-Z])*$/
 return reg.test(value)
})

别名设置

使用 vee-validate 内部提供的验证规则时,如果不使用别名,就会固定使用当前元素的name值去显示错误信息,如我下面所示如果我不使用别名,使用非空验证,当在中文环境下,就会显示,myPhone是必须的,这样用户是无法知道myPhone是什么的,所以对应别名例用户更好分辨对应的元素别名设置规则, key 是你元素的 name 属性, value 是有错误信息是展示的值

1、别名中文

export const attributesCh = {
 relation: '关系',
 relationDesc: '关系描述',
 personName: '姓名',
 accountName: '账户名',
 gender: '性别',
 phone: '手机号'
 ...
}

2、别名英文

export const attributesEn = {
 phoneNum: 'phoneNum',
 userName: 'name',
 idCard: 'idCard',
 zipCode: 'zipCode',
 personMail: 'Email',
 addressDetail: 'address',
 isSmoker: 'isSmoker'
 ...
}

好了封装基本就是这么简单,最后贴出完整的代码。

validator.js文件。

import Vue from 'vue'
import VeeValidate, {Validator} from 'vee-validate'
import zhCN from 'vee-validate/dist/locale/zh_CN'
import en from 'vee-validate/dist/locale/en'

import {attributesCh, attributesEn} from 'common/js/validateRule'

Vue.use(VeeValidate)

Validator.localize('zh_CN', {
 messages: zhCN.messages,
 attributes: attributesCh
})
Validator.localize('en', {
 messages: en.messages,
 attributes: attributesEn
})

export function setMessage(validName, errMsgZh, errMsgEn, validate) {
 Validator.locale = 'en'
 Validator.extend(validName, {
 getMessage: (field, [args]) => {
  return errMsgEn
 },
 validate: validate
 })
 Validator.locale = 'zh_CN'
 Validator.extend(validName, {
 getMessage: (field, [args]) => {
  return errMsgZh
 },
 validate: validate
 })
}

validatorRule.js文件

import {setMessage} from 'common/js/validate'
import {idCardNoUtil} from 'common/js/validateExternal'

setMessage('phoneNum', '手机号不正确', 'phoneNum error', (value, [args]) => {
 const reg = /^((13|14|15|17|18)[0-9]{1}\d{8})$/
 return reg.test(value)
})
setMessage('personName', '姓名只能包括中文字或英文字母', 'username no yes', (value, [args]) => {
 const reg = /^([\u4e00-\u9fa5\s]|[a-zA-Z])*$/
 return reg.test(value)
})
// 别名中文
export const attributesCh = {
 relation: '关系',
 relationDesc: '关系描述'
 ...
}
// 别名英文
export const attributesEn = {
 phoneNum: 'phoneNum',
 userName: 'name',
 idCard: 'idCard'
 ...
}

如果喜欢的话,就给个♥吧。。。。。

总结

以上所述是小编给大家介绍的vue中使用vee-validator完成表单校验方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
根据经纬度计算地球上两点之间的距离js实现代码
Mar 05 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
javascript中的this详解
Dec 08 Javascript
jQuery类选择器用法实例
Dec 23 Javascript
JavaScript数组操作函数汇总
Aug 05 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 jQuery
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 Vue.js
解决vue的过渡动画无法正常实现问题
Oct 31 #Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 #Javascript
js new Date()实例测试
Oct 31 #Javascript
一起写一个即插即用的Vue Loading插件实现
Oct 31 #Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 #Javascript
vue路由切换之淡入淡出的简单实现
Oct 31 #Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 #Javascript
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php的curl实现get和post的代码
2008/08/23 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
小程序实现投票进度条
2019/11/20 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
python实现在pickling的时候压缩的方法
2014/09/25 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
新闻学专业个人求职信写作
2014/02/04 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
党员民主评议自我评价
2014/10/20 职场文书
继续教育个人总结
2015/03/03 职场文书
爱国主义教育主题班会
2015/08/13 职场文书