Skip to content

TimelineValidate Document

xiaohaijoe edited this page Dec 7, 2018 · 5 revisions

TimelineValidate

TimelineValidate是一个基于node.js数据验证器,提供了丰富的类型校验,只需简单的几行,就可以完成数据校验
不管是node.js后台开发,还是web前端开发,都可以使用该验证器进行数据校验。

主要特性:

  1. 提供丰富的验证规则
  2. 可自定义规则
  3. 提供静态调用方法

使用方法:

  1. cnpm install
  2. npm run dev

基本使用

let rule =[
  ['name', 'require|max:25'],
  ['email', 'email']
]
let validate = new Validate(rule);
let data = {
    'name': 'hello world',
    'email': 'hijack@xiaohaijoe.com'
}
if (!validate.check(data)) {
    console.log(validate.getError());
}

设置规则

规则定义支持下面两种方式:

// 对于一个字段可以设置多个验证规则,使用|分割。
let rule = [
    ['name', 'require|max:25'],
    ['email', 'email']
]
let validate = new Validate(rule);
// 或者采用数组方式定义多个规则(适用于你的验证规则中有|的情况):
let rule = [
     ['name', ['require', 'max:25']],
     ['email', 'email']
]
let validate = new Validate(rule);

错误信息

如果没有定义任何的验证提示信息,系统会显示默认的错误信息,例如:

let rules = [
    ['name', 'require|max:25'],
    ['age', 'number|between:1,120'],
    ['email', 'email'],
];
let validate = new Validate(rules)
let data = {
    'name': 'hello world',
    'age': 125,
    'email': 'validate@xiaohaijoe.com'
}
if (!validate.check(data)) {
    console.log(validate.getError())
}

可以给age字段设置中文名,例如:

let rules = [
    ['name', 'require|max:25'],
    ['age|年龄', 'number|between:1,120'],
    ['email', 'email'],
];
let validate = new Validate(rules)
let data = {
    'name': 'hello world',
    'age': 125,
    'email': 'validate@xiaohaijoe.com'
}
if (!validate.check(data)) {
    console.log(validate.getError())
}

验证规则和提示信息分开定义

如果要输出自定义的错误信息,有两种方式可以设置。下面的一种方式是验证规则和提示信息分开定义:

let rules = [
    ['name', 'require|max:25'],
    ['age', 'number|between:1,120'],
    ['email', 'email'],
];
let msg = [
    ['name.require', '名称必须'],
    ['name.max', '名称最多不能超过25个字符'],
    ['age.number', '年龄必须是数字'],
    ['age.between', '年龄只能在1-120之间'],
    ['email', '邮箱格式错误'],
];
let validate = new Validate(rules,msg)
let data = {
    'name': 'hello world',
    'age': 125,
    'email': 'validate@xiaohaijoe.com'
}
if (!validate.check(data)) {
    console.log(validate.getError())
}

验证规则和提示信息一起定义

let rules = [
    ['name', 'require|max:25', '姓名不能为空|名称不能超过25个字符'],
    ['age', 'number|between:1,120', '年龄必须是数字'],
]
let validate = new Validate(rules);
let data = {
    'name': 'hello world',
    'age': 20,
    'email': 'validate@xiaohaijoe.com'
}
if (!validate.check(data)) {
    console.log(validate.getError())
}

自定义规则

可以传入自定义的规则,例如:

let rule = [
    ['name', ['require', checkName]]
];
let validate = new Validate(rule);
let data = {
    'name': 'hello',
};
if (!validate.check(data)) {
    console.log(validate.getError())
}

定义checkName方法:

static checkName(name) {
    if (name.length > 25) {
        return true
    }
    return false
}

静态调用

如果需要使用内置的规则验证单个数据,可以使用静态调用的方式。

Validate.is('thinkphp@qq.com', 'email');  // true
Validate.is('2016-jj-03', 'date');  // false
Validate.in('a', ['a', 'b', 'c']); // true
Validate.gt(10, 8);        // true
Validate.regex('  123', /^\\s*|\\d*$/)); // true

内置规则

系统内置的验证规则如下:

格式验证类

require
// 验证某个字段必须,例如:
let rule = [['name','require']];
number
// 验证某个字段的值是否为数字
let rule = [['num','number']];
email
// 验证某个字段的值是否为email地址,例如:
let rule = [['email','email']];
float
// 验证某个字段的值是否为浮点数字
let rule = [['num','float']];
boolean
// 验证某个字段的值是否为布尔值
let rule = [['num','boolean']];
array
// 验证某个字段的值是否为数组,例如:
let rule = [['info','array']];
accepted
// 验证某个字段是否为为 yes, on, 或是 1。这在确认"服务条款"是否同意时很有用,例如:
let rule = [['accept','accepted']];
date
// 验证值是否为有效的日期,例如:
let rule = [['date','date']];
alpha
// 验证某个字段的值是否为字母,例如:
let rule = [['name','alpha']];
alphaNum
// 验证某个字段的值是否为字母和数字,例如:
let rule = [['name','alphaNum']];
alphaDash
// 验证某个字段的值是否为字母和数字,下划线_及破折号-,例如:
let rule = [['name','alphaDash']];
chs
// 验证某个字段的值只能是汉字,例如:
let rule = [['name','chs']];
chsAlpha
// 验证某个字段的值只能是汉字、字母,例如:
let rule = [['name','chsAlpha']];
chsAlphaNum
// 验证某个字段的值只能是汉字、字母和数字,例如:
let rule = [['name','chsAlphaNum']];
chsDash
// 验证某个字段的值只能是汉字、字母、数字和下划线_及破折号-,例如:
let rule = [['name','chsDash']];

长度和区间验证类

in
// 验证某个字段的值是否在某个范围,例如:
let rule = [['num', 'in:1,2,3']];
notIn
// 验证某个字段的值不在某个范围,例如:
let rule = [['num', 'notIn:1,2,3']];
between
// 验证某个字段的值是否在某个区间,例如:
let rule = [['num', 'between:1,10']];
notBetween
// 验证某个字段的值不在某个范围,例如:
let rule = [['num', 'notBetween:1,10']];
length
// 验证某个字段的值的长度是否在某个范围,例如:
let rule = [['num', 'len:4,25']];
// 或者指定长度
let rule = [['num', 'len:4']];
max
// 验证某个字段的值的最大长度,例如:
let rule = [['num', 'max:25']];
min
// 验证某个字段的值的最小长度,例如:
let rule = [['num', 'min:5']];

字段比较类

confirm
// 验证某个字段是否和另外一个字段的值一致,例如:
let rule = [['repassword', 'require|confirm:password']];
let data = {
    'password': '123456',
    'repassword': '1234567',
};
let validate = new Validate(rule)
if(!validate.check(data)){
    console.log(validate.getError());
}
different
// 验证某个字段是否和另外一个字段的值不一致,例如:
// let rule = [['name', 'require|different:account']];
eq 或者 = 或者 same
// 验证是否等于某个值,例如:
// let rule = [['score', 'eq:100']];
// let rule = [['num', '=:100']];
// let rule = [['num', 'same:100']];
egt 或者 >=
// 验证是否大于等于某个值,例如:
// let rule = [['score', 'egt:60']];
// let rule = [['num', '>=:100']];
gt 或者 >
// 验证是否大于某个值,例如:
// let rule = [['num', 'gt:60']];
// let rule = [['num', '>:100']];
elt 或者 <=
// 验证是否小于等于某个值,例如:
// let rule = [['num', 'elt:100']];
// let rule = [['num', '<=:100']];
lt 或者 <
// 验证是否小于某个值,例如:
// let rule = [['num', 'lt:100']];
// let rule = [['num', '<:100']];
验证字段比较支持对比其他字段
// 验证对比其他字段大小(数值大小对比),例如:
// let rule = [['price', 'lt:market_price']];
let rule = [['price', '<:market_price']];
正则表达式
// 如果正则中包含"|"符号,必须使用数组模式定义规则
// let rule = [['name', ['/^\\w+\\s+|\\d+$/i']]];
let rule = [['name','\\w+\\d+']];