Element表单验证(1)
Element表单验证(1)
首先要掌握Element官方那几个表单验证的例子,然后才看下面的教程。
Element主要使用了async-validator这个库作为表单验证
async-validator
主要分成三部分
- Validate
- Options
- Rules
其中,对于我们使用Element的来说,Rules最重要,也是这部分内容较多的。
async-validator各部分
async-validator基本使用
import Validator from 'async-validator'
// 规则的描述
const rules = {
name: { type: 'string', required: true }
}
// 根据规则生成验证器
const validator = new Validator(rules)
// 要验证的数据源
const source = {
name: 'LanTuoXie'
}
// 验证后的回调函数
function callback (errors, fileds) {
if (errors) {
// 验证不通过,errors是一个数组,记录那些不通过的错误信息
// fileds是所有数据源的字段名,也即上面的source的'name'
// 验证是根据字段名来的,rules.name 对应 source.name。 字段名要一样才会验证
}
// 下面是验证通过的逻辑
}
// 验证数据源是否符合规则
validator.validate(source, callback)
Validate
就是上面例子中的validator.validate,是一个函数
function(source, [options], callback)
source和callback对应上面的例子。
Options
Options有两个值
first
: 一个布尔值,如果出现字段不通过,终止验证后面的字段firstFields
: 布尔值或者字符串,如果验证一个字段时,一个规则不通过,终止验证下个规则(一个字段,多个规则的情况)
firstFields
是针对单个字段多规则的情况下使用,而first
是针对所有字段
Rules
最重要的还是Rules。定义rule可以有三种形式,但是rules字段名一定要和数据源source的字段名一致。
- 函数的方式:
{ name(rule, value, callback, source, options) {} }
- 对象的方式:
{ name: { type: 'string', required: true } }
- 数组的方式:
{ name: [{ type: 'string' }, { required: true }] }
上面可以看到,字段名name可以有3种方式定义规则,在使用Element的时候还是推荐对象和数组的方式,这个两个比较简单,函数看情况使用。
除了type
和required
还有哪些用法可以用以及有什么用?
Rules的默认规则
type
: 要被验证的数据的类型如url
和number
等required
: 是否必填pattern
:使用正则来验证min
: 数据的长度的最小值 (数据类型必须是string
或array
)max
: 数据的长度的最大值 (数据类型必须是string
或array
)len
: 数据的长度必须等于这个值 (数据类型必须是string
或array
)enum
: 数据的值必须等于这个枚举数组某个元素{ enum: [1, 2, 3] }
transform
: 一个钩子函数,在开始验证之前可以对数据先处理后验证,如吧number
转为string
后再验证message
: 报错的提示信息可以是字符串也可以是jsx标签<span>Name is required</span>
validator
: 自定义验证函数以及报错信息validator(rule, value, callback)
- 还有一个Deep Rules是处理
object
或者array
类型的,使用了fields
或defaultField
fields
:Deep Rules的时候使用,定义下一层的字段名以及规则defaultField
: Deep Rules的时候使用,所有下一层的字段都会采用该规则,可以被fields
替换
默认的Type
string
:必须是String类型,规则不设置type默认是这个number
:必须是Number类型,如果后台返回的数据是字符串,可以用transform
转为Number类型,字符串类型的数字('12')不会通过,要注意boolean
: 必须是Boolean类型method
: 必须是Functionregexp
:必须是正则RegExpinteger
:是Number类型的正整数float
: 是Number类型的浮点数array
: 是Array.isArray通过的数组object
: Array.isArray不通过的Object类型enum
: 要先定义enum,然后值必须是enum某个值date
: 必须是Date对象的实例url
: String类型且符合链接格式hex
email
: String类型,且符合邮箱格式
Deep Rules使用demo
cosnt urls = ['http://www.baidu.com', 'http://www.baidu.com']
// 一个urls的数组,
const rules = {
urls: {
type: 'array',
required: true,
defaultField: { type: 'url' }
}
}
const ids = {
name: 'LanTuoXie',
age: 12,
spc: '帅'
}
const rules = {
ids: {
type: 'object',
required: true,
fields: {
name: { type: 'string', required: true },
age: { type: 'number', required: true, tranform: Number },
spc: { type: 'string', required: true }
}
}
}
自定义验证validator
validator(rule, value, callback)
rule
: 记录了验证字段的字段名以及规则的信息value
: 要验证的值callback
: 如果callback()
代表验证通过,如果callback(new Error('错误要提示的信息'))
代表验证不通过
// 验证是[min, max]范围内的正整数
const betweenInt = (min, max) => (rule, v, cb) => {
const isBetween = v >= min && v <= max
const isInt = /^[0-9]+$/.test(v)
if (isBetween && isInt) return cb()
return cb(new Error(`要求是在${min}到${max}的正整数 [${min}, ${max}]`))
}
const rules = {
num: { validator: betweenInt(1, 5), required: true }
}
Element表单验证(1)的更多相关文章
- Element表单验证(2)
Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到async-validator由3大部分组成 ...
- async-validator:Element表单验证
转载文章:Element表单验证(2) Element表单验证(2) 上篇讲的是async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇. 上篇讲到a ...
- vue element 表单验证不通过,滚动到固对应位置
我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...
- vue+element 表单验证
效果图 <template> <div class="formValidator"> <div v-for="(item,index) in ...
- Element表单验证规则
一.简单的逻辑验证使用方法: 方法步骤: 1.在html中给el-form增加 :rules="rules" 2.html中在el-form-item 中增加属性 prop=&qu ...
- Element 表单验证,不清空数据,仅仅取消表单字段校验
重置表单 this.$refs['ageForm'].resetFields() // 表单重置 仅清空校验 this.$refs['ageForm'].clearValidate() // 清除验证
- 解决“element表单验证输入的数字检测出来是string”的问题
form表单: 校验规则: 注意:一.数字类型的验证需要在 v-model 处加上 .number 的修饰符,这是 Vue 自身提供的用于将绑定值转化为 number 类型的修饰符.二.校验中是否添加 ...
- element表单验证
rules: { name:[{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 2, max: 5, message: '长度 ...
- JS判断字符串长度,结合element el-input el-form 表单验证(英文占1个字符,中文汉字占2个字符)
首先看看判断字符串长度的几种方法(英文占1个字符,中文汉字占2个字符) 方法一: function strlen(str) { var len = 0; for (var i = 0; i < ...
随机推荐
- Java基础13-数组算法
1.数组的复制 //复制算法,将arr1数组的值复制给arr2数组 import java.util.Arrays; public class Test1{ public static void ma ...
- [转]Jquery Mobile dialog的生命周期
本文转自:http://www.cnblogs.com/jackhuclan/archive/2012/04/05/2432972.html JQuery Mobile对htm5的移动开发绝对是个好用 ...
- 贪心:钱币找零问题(C++)
贪心是一种算法范例,它一点一点地构建解决方案,总是选择下一个提供最明显和最直接好处的部分.因此,选择局部最优也会导致全局解的问题最适合贪心问题. 例如,考虑分数背包问题.局部最优策略是选择权重比最大的 ...
- 04-spring中的aop演示
1 xml配置 1 导包 2 准备对象 package www.test.service; public interface UserService { public abstract void ad ...
- git分布式的理解----简单服务端搭建
Git是分布式的,并没有服务端跟客户端之分,所谓的服务端安装的其实也是git.Git支持四种协议,file,ssh,git,http.ssh是使用较多的,下面使用ssh搭建一个免密码登录的服务端. 1 ...
- .net 与 asp.net
.net 指的是框架,框架包含很多东西例如: > 语言: VB, C#, C++, Ruby, Python ... > 类库: 网络通讯,图像处理, 安全,IO,数据链接访问 ... & ...
- C# params 动态参数
public delegate void Action(params object[] args); 再简单的东西都要强迫自己记录了,前段时间硬盘坏了,资料全没了,也没有备份,太痛苦了,那么多资料全没 ...
- div模拟textarea自适应高度
之前在公司做项目的时候,有这么一个需求,要我写一个评论框,可以随着评论的行数增加而自动扩大,最开始我想用textarea实现,但是后来尝试后发现textarea并不适合,textarea的高度不会随着 ...
- 简单封装的web里面的tab点击和swipe滑动的小插件
简单封装的一个web的手势,tab和swipe,里面的具体数值都是自定义上去的,没有实际的标准,可以自行去修改都行 前两个是详解,js插件在最后一部分代码 ``` //封装web的tab步骤详解 &l ...
- (生产)create-keyframe-animation -动画实现
参考:https://github.com/HenrikJoreteg/create-keyframe-animation 实例 var animations = require('create-ke ...