首页 > 其他分享 >Vue表单验证插件Vue Validator使用方法详解

Vue表单验证插件Vue Validator使用方法详解

时间:2022-11-04 16:56:48浏览次数:78  
标签:插件 Vue script text Validator div validation type validator

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

相关文章