https://www.jb51.net/article/110609.htm
Vue-validator 是Vue的表单验证插件,供大家参考,具体内容如下
Vue版本: 1.0.24
Vue-validator版本: 2.1.3
基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
< 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 属性和 $ 前缀组件
验证结果结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{
// 表单整体验证
"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表该校验器所在元素是必填项。
1 2 3 4 5 6 7 8 9 10 |
< 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,需要说明限制长度多少。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
< 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 字段来自定义验证规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
< 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 的值可以是组建实例的数据属性。这样可以用来动态绑定校验规则。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
< 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动态设置的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
< 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();方法来动态重置校验结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
< 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
< 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
< 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
1 2 3 4 5 |
< 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支持分组校验。例如重复密码功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
< 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,script,text,Validator,div,validation,type,validator From: https://www.cnblogs.com/zhoading/p/16858334.html