Vue表单验证插件Vue Validator使用方法详解
发布时间 - 2026-01-11 00:33:30 点击率:次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">username:</label>
<input type="text" id="username" v-validate:username="['required']" />
</div>
<div class="comment-filed">
<label for="comment">comment:</label>
<input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
</div>
<div class="errors">
<p v-if="$validation.username.required">请输入你的名字</p>
<p v-if="$validation.comment.maxlength">您的评论太长了</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
将要验证的表单包裹在validator自定义元素指令中,而在要验证的表单控件元素的 v-validate 属性上绑定相应的校验规则。
验证结果会保存在组建实例的 $validation 属性下。 $validation 是由 validator 元素和 name 属性和 $ 前缀组件
验证结果结构
{
// 表单整体验证
"valid": false, // 字段校验是否通过
"invalid": true, // valid 取反
"touched": false, // 校验字段所在元素获得通过焦点时返回true,否则返回false
"untouched": true, // touched 取反
"modified": false, // 当元素值与初始值不同时返回true,否则返回false
"dirty": false, // 字段值改变过至少一次返回true,否则返回false
"pristine": true, // dirty 取反
// 字段单一验证
"username": {
"required": true,
"modified": false,
"pristine": true,
"dirty": false,
"untouched": true,
"touched": false,
"invalid": true,
"valid": false
},
"comment": {
"maxlength": false,
"modified": false,
"pristine": true,
"dirty": false,
"untouched": true,
"touched": false,
"invalid": false,
"valid": true
}
}
校验结果由两部分组成。表单整体校验结果和单个字段校验结果。
验证器语法
v-validate 指令语法:
v-validate[:field]=”array literal | object literfal | binding”
校验字段名field
field用来标识校验字段,之后可以用该字段来引用校验结果
v-validate 指令用来定义校验规则,其值可以是数组字面量,对象字面量,组件实例数组属性名。
数组字面量
当校验器不需要额外参数时,可以使用数组字面量形式,如 required 校验器,只要出现就带I表该校验器所在元素是必填项。
<div id="app">
<validator name="validation">
<form novalidate>
Zip: <input type="text" v-validate:zip="['required']" /><br />
<div>
<span v-if="$validation.zip.required">邮政编码是必填项</span>
</div>
</form>
</validator>
</div>
对象字面量
对象字面量语法适合需要额外参数的校验器。如限制输入长度的校验器 minlength,需要说明限制长度多少。
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="{ required:true, minlength: 3, maxlength: 16 }" />
<br />
<div>
<p v-if="$validation.id.required">ID不能为空</p>
<p v-if="$validation.id.minlength">你的ID名字太短</p>
<p v-if="$validation.id.maxlength">你的ID名字太长</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
还可以用 对象字面量语法通过 rule 字段来自定义验证规则
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="{minlength: {rule: 3}, required: true, maxlength: {rule: 16}}" />
<br />
<div>
<p v-if="$validation.id.required">ID不能为空</p>
<p v-if="$validation.id.minlength">你的ID名字太短</p>
<p v-if="$validation.id.maxlength">你的ID名字太长</p>
</div>
<input type="submit" value="send" v-if="$validation.valid" />
</form>
</validator>
</div>
实例数据属性
v-validate 的值可以是组建实例的数据属性。这样可以用来动态绑定校验规则。
<div id="app">
<validator name="validation">
<form novalidate>
ID: <input type="text" v-validate:id="rules" /><br />
<div>
<p v-if="$validation.id.required">不能为空</p>
<p v-if="$validation.id.minlength">你的ID太短</p>
<p v-if="$validation.id.maxlength">你的ID太长</p>
</div>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
data: {
rules: {
required: true,
minlength: 3,
maxlength: 16
}
}
});
</script>
内置校验规则
vue-validator 内置一些常用的验证规则:
- required — 输入值不能为空
- pattern — 必须匹配pattern表示的正则表达式
- minlength — 输入值长度不能小于minlength表示的值
- maxlength — 输入的值不能大于maxlength表示的值
- min — 输入值不能小于min表示的值
- max — 输入值不能大于max表示的值
与v-model同时使用
vue-validator会自动校验通过v-model动态设置的值。
<div id="app">
<validator name="validation">
<form novalidate>
message: <input type="text" v-model="msg" v-validate:message="{required: ture, minlength: 8}" />
<br />
<p v-if="$validation.message.required">message不能为空</p>
<p v-if="$validation.message.minlength">message输入太长位数</p>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
msg: ''
}
});
setTimeout(function () {
vm.msg = 'hello world!';
}, 2000);
</script>
重置校验结果
通过在Vue组件实例上调用$resetValidation();方法来动态重置校验结果。
<div id="app">
<validator name="validation">
<form novalidate>
<div class="username-field">
<label for="username">username:</label>
<input type="text" id="username" v-validate:username="['required']" />
</div>
<div class="comment-filed">
<label for="comment">comment:</label>
<input type="text" id="comment" v-validate:comment="{maxlength: 256}" />
</div>
<div class="errors">
<p v-if="$validation.username.required">用户名不能为空</p>
<p v-if="$validation.comment.maxlength">输入文字超过256个</p>
<input type="submit" value="send" v-if="$validation.valid" />
<button type="button" @click="onReset">Reset Validation</button>
</div>
<pre>{{$validation | json}}</pre>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
methods: {
onReset: function () {
this.$resetValidation();
}
}
});
</script>
复选框checkbox
<div id="app">
<validator name="validation">
<form novalidate>
<h1>调查</h1>
<fieldset>
<legend>请选择水果</legend>
<input type="checkbox" id="apple" value="apple" v-validate:fruits="{
required: { rule: true, message: requiredErrorMsg },
minlength: { rule: 1, message: minlengthErrorMsg },
maxlength: { rule: 2, message: maxlengthErrorMsg }
}" />
<label for="apple">Apple</label>
<input type="checkbox" id="orange" value="orange" v-validate:fruits />
<label for="orange">Orange</label>
<input type="checkbox" id="grape" value="grape" v-validate:fruits />
<label for="grape">Grape</label>
<input type="checkbox" id="banana" value="banana" v-validate:fruits />
<label for="banana">Banana</label>
<ul class="errors">
<li v-for="msg in $validation.fruits">
<p>{{msg | json}}</p>
</li>
</ul>
</fieldset>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app',
computed: {
requiredErrorMsg: function () {
return '请选择水果';
},
minlengthErrorMsg: function () {
return '请选择至少1个水果!';
},
maxlengthErrorMsg: function () {
return '请选择最多2个水果!';
}
}
});
</script>
下拉类表select
<div id="app">
<validator name="validation">
<form novalidate>
<select v-validate:lang="{required: true}">
<option value="">请选择语言</option>
<option value="javascript">javascript</option>
<option value="php">php</option>
<option value="node">node</option>
</select>
<div class="errors">
<p v-if="$validation.lang.required">不能为空!</p>
</div>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
校验状态class
各校验状态都有其对应的class(默认) 也可以自定义校验状态class
<validator name="validation" :classes="{touched: 'touehc-validator', dirty: 'dirty-validator'}">
<label for="username">username</label>
<<input type="text" id="username" :classes="{valid: 'valid-username', invalid: 'invalid-username'}" v-validate:username="{required: {rule: true, message: 'required you name!'}}">
</validator>
<!-- classes属性只能在validator元素或应用了v-validate的元素上使用有效 -->
分组校验
vue-validator支持分组校验。例如重复密码功能。
<div id="app">
<validator name="validation" :groups="['passwordGroup']">
<form novalidate>
username: <input type="text" v-validate:username="['required']" /><br />
password: <input type="password" v-validate:password="{ minlength: 8, required: true }" group="passwordGroup" /><br />
comfirm password: <input type="password" v-validate:password-comfirm="{minlength: 8, required: true}" group="passwordGroup" />
<div class="errors">
<p v-if="$validation.username.required">用户名不能为空</p>
<p v-if="$validation.password.required">密码不能为空</p>
<p v-if="$validation.password.minlength">密码不能少于8位</p>
<p v-if="$validation.password-comfirm.required">重复密码不能为空</p>
<p v-if="$validation.password-comfirm.minlength">密码不能少于8位</p>
<p v-if="$validation.passwordGroup.valid">密码不一致</p>
</div>
</form>
</validator>
</div>
<script src="//cdn.bootcss.com/vue/1.0.24/vue.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.bootcss.com/vue-validator/2.1.3/vue-validator.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Vue({
el: '#app'
});
</script>
本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Vue
# Validator
# 表单验证
# vue表单验证你真的会了吗?vue表单验证(form)validate
# Vue ElementUI之Form表单验证遇到的问题
# Vue快速实现通用表单验证功能
# vue elementui form表单验证的实现
# 解决vue+ element ui 表单验证有值但验证失败问题
# Vue中使用vee-validate表单验证的方法
# Vue使用vux-ui自定义表单验证遇到的问题及解决方法
# vue3实现H5表单验证组件的示例
# 为空
# 请选择
# 表单
# 太长
# 太短
# 可以用
# 自定义
# 绑定
# 必填
# 您的
# 都有
# 最多
# 不需要
# 是由
# 已被
# 而在
# 请大家
# 用了
# 请输入
# 欢迎大家
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
高防服务器租用指南:配置选择与快速部署攻略
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
lovemo网页版地址 lovemo官网手机登录
北京专业网站制作设计师招聘,北京白云观官方网站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
历史网站制作软件,华为如何找回被删除的网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Bootstrap整体框架之JavaScript插件架构
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel观察者模式如何使用_Laravel Model Observer配置
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
清除minerd进程的简单方法
如何快速生成高效建站系统源代码?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Python制作简易注册登录系统
Laravel Docker环境搭建教程_Laravel Sail使用指南
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Swift中swift中的switch 语句
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Swift中循环语句中的转移语句 break 和 continue
香港网站服务器数量如何影响SEO优化效果?
java ZXing生成二维码及条码实例分享
详解jQuery停止动画——stop()方法的使用
详解Android——蓝牙技术 带你实现终端间数据传输
如何在Windows环境下新建FTP站点并设置权限?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Android使用GridView实现日历的简单功能
Python3.6正式版新特性预览
Laravel如何使用Telescope进行调试?(安装和使用教程)
如何在云虚拟主机上快速搭建个人网站?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
jQuery中的100个技巧汇总
C语言设计一个闪闪的圣诞树
油猴 教程,油猴搜脚本为什么会网页无法显示?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
使用C语言编写圣诞表白程序

