navy-schema v1.1.5

A simple data validator for JavaScript
Installation
- npm:
npm install navy-schema - yarn:
yarn add navy-schema
Example
import { Navy } from 'navy-schema'
const schema = Navy.object()
.keys({
username: Navy.string()
.alphanum()
.min(6)
.max(18),
password: Navy.string()
.regexp(/^[a-z0-9_]{8, 20}$/i),
repeat_password: Navy.ref('password'),
access_token: Navy.array()
.items([
Navy.string().required(),
Navy.number().required()
])
})
.optional({
birthday: Navy.date().required(),
email: Navy.string().mail()
})
const data = {
username: 'username001',
password: 'password',
repeat_password: 'password',
access_token: ['access_token', 1024, 2048]
}
const another = Object.assign({
birthday: '2020-02-02',
email: 'example@mail.com'
}, data)
// -> true
schema.validate(data)
// -> true
schema.validate(another)
// -> false
schema.validate({})API
schema.validate(data)
对指定数据进行校验,并返回一个 Promise 对象
schema.validateSync(data)
对指定数据进行校验,并返回布尔值
schema.validate在v1.1.0后的版本移除,schema.validateSync更名为schema.validate
schema.effect(status, names, hook)
向 Navy 添加钩子,在检验后调用;替换原本的 schema.validate 函数
status- 检验结果,值为passed|failednames- 需要添加钩子的规则名,值为string类型或包含string类型的数组hook- 钩子函数,会按顺序传入规则函数的参数ref和schema.validate函数的参数val
// Example
import { Navy } from 'navy-schema'
let i = 0, j = 0, k = 0
const schema = Navy.object()
.keys({
username: Navy.string()
.alphanum()
.effect('passed', 'alphanum', () => i = 1),
password: Navy.string()
.regexp(/^[a-z0-9_]{8, 20}$/i)
.effect('passed', 'regexp', () => j = 1),
repeat_password: Navy.ref('password'),
})
.effect('passed', 'keys', () => k = 1)
const data = {
username: 'username001',
password: 'password',
repeat_password: 'password',
}
// -> true
schema.validate(data)
// -> 1, 1, 1
console.log(i, j, k)any.required
指定该值任意类型且不为空
any.empty
指定该值为 undefined 或 null
any.equal(ref)
指定该值与参照对象完全一致
ref-any,参照对象
any.truthy
指定该值必须为 val == true
any.falsy
指定该值必须为 val == false
number.required
指定该值为 number 类型且不为空
number.greater(ref)
指定该值为 number 类型且大于参照对象
ref-number,参照对象
number.less(ref)
指定该值为 number 类型且小于参照对象
ref-number,参照对象
number.max(ref)
指定该值为 number 类型且小于等于参照对象
ref-number,参照对象
number.min(ref)
指定该值为 number 类型且大于等于参照对象
ref-number,参照对象
number.equal(ref)
指定该值为 number 类型且等于参照对象
ref-number,参照对象
number.int
指定该值为 number 类型且为整数
number.multiple(ref)
指定该值为 number 类型且为参照对象的倍数
ref-number,参照对象
number.divisor(ref)
指定该值为 number 类型且为参照对象的因数
ref-number,参照对象
number.positive
指定该值为 number 类型且为正数
number.negative
指定该值为 number 类型且为负数
string.required
指定该值为 string 类型且不为空
string.regexp(ref)
指定该值为 string 类型且符合正则表达式
ref-RegExp,正则表达式
string.includes(ref)
指定该值为 string 类型且包含参照对象
ref-string,参照对象
string.equal(ref)
指定该值为 string 类型且与参照对象相等
ref-string,参照对象
string.max(ref)
指定该值为 string 类型且字符串长度小于等于参照对象
ref-number,参照对象
string.min(ref)
指定该值为 string 类型且字符串长度大于等于参照对象
ref-number,参照对象
string.length(ref)
指定该值为 string 类型且字符串长度等于参照对象
ref-number,参照对象
string.number
指定该值为 string 类型且只有数字组成
string.alphabet
指定该值为 string 类型且只有字母组成
string.alphanum
指定该值为 string 类型且只有字母和数字组成
string.URL
指定该值为 string 类型且为合法 URL 地址
string.mail
指定该值为 string 类型且为合法电子邮箱
string.phone
指定该值为 string 类型且符合中华人民共和国手机号段规则
string.IDCard
指定该值为 string 类型且符合中华人民共和国身份证号码验证规则
date.required
指定该值为 ISOString、number 或 Date 类型且不为空
date.after(ref)
指定该值为 ISOString、number 或 Date 类型且日期在参照对象之后
ref-ISOString、number或Date,参照对象
date.before(ref)
指定该值为 ISOString、number 或 Date 类型且日期在参照对象之前
ref-ISOString、number或Date,参照对象
date.at(ref)
指定该值为 ISOString、number 或 Date 类型且日期等于参照对象
ref-ISOString、number或Date,参照对象
date.max(ref)
指定该值为 ISOString、number 或 Date 类型且日期在参照对象之前(包含参照对象)
ref-ISOString、number或Date,参照对象
date.min(ref)
指定该值为 ISOString、number 或 Date 类型且日期在参照对象之后(包含参照对象)
ref-ISOString、number或Date,参照对象
array.required
指定该值为 array 类型且不为空
array.max(ref)
指定该值为 array 类型且数组长度小于等于参照对象
ref-number,参照对象
array.min(ref)
指定该值为 array 类型且数组长度大于等于参照对象
ref-number,参照对象
array.length(ref)
指定该值为 array 类型且数组长度等于参照对象
ref-number,参照对象
array.items(ref)
指定该值为 array 类型且数组内的值符合参照数组中的任意规则
ref-schema[],值为Navy实例的数组
array.only(ref)
指定该值为 array 类型且数组内的值符合参照对象规则
ref-schema,Navy实例
object.required
指定该值为 object 类型且不为空
object.keys(ref)
指定该值为 object 类型且键值符合参照对象规则
ref-object<string, schema>,参照对象
/** keys 和 optional 方法会根据调用顺序覆盖冲突的键值 */object.optional(ref)
指定该值为 object 类型,该值可以为未定义或符合对象规则
ref-object<string, schema>,参照对象
/** keys 和 optional 方法会根据调用顺序覆盖冲突的键值 */ref(key, ancestor)
创建一个值的引用对象,其他 Navy 实例可以使用引用对象作为参照对象。这个方法只能在 schema<object> 中使用
key-string,需要引用的键名ancestor-number,向父对象偏移的次数,每有一代object则偏移量加一
// Example
import { Navy } from 'navy-schema'
const schema = Navy.object()
.keys({
a: Navy.any().equal('luke'),
b: Navy.any().equal(Navy.ref('a')),
c: Navy.ref('a'),
d: {
e: Navy.ref('a', 1)
}
})
// -> true
schema.validate({ a: 'luke', b: 'luke', c: 'luke', d: { e: 'luke' } })