async-validator-chain
v0.0.0-alpha.1
Published
A chain-call style async-validator schema tools
Downloads
2
Readme
async-validator-chain (still under development)
使用链式调用简化表单验证代码
simplify form validation code using chained calls.
import { str, obj, arr, createSchema } from 'async-validator-chain'
const schema = createSchema({
userId: str(0, 10).required('用户编号不能为空'),
extends: obj()
.required('扩展信息不能为空')
.fields({
nickname: str(0, 3).required('昵称不能为空'),
}),
date: dateRange('2020-01-01', '2020-12-31').required('注册日期不能为空'),
arr: arr(0, 1).items(num(0, 100).required('数字不能为空')),
}).toJson()
可以和以下代码相当
Can be equal to this JSON Schema.
const rules = {
userId: [
{ required: true, message: '用户编号不能为空' },
{ type: 'string', min: 0, max: 10, message: '用户编号长度必须在0-10之间' },
],
extends: [
{ required: true, message: '扩展信息不能为空' },
{
type: 'object',
fields: {
nickname: [
{ required: true, message: '昵称不能为空' },
{ type: 'string', min: 0, max: 3, message: '昵称长度必须在0-3之间' },
],
},
},
],
date: [
{ required: true, message: '日期不能为空' },
{
type: 'array',
len: 2,
message: '日期必须为2个元素',
defaultFields: {
type: 'date',
required: true,
message: '日期不能为空',
},
},
],
arr: [
{ required: true, message: '数组不能为空' },
{
type: 'array',
min: 0,
max: 1,
message: '数组长度必须为0-1',
defaultItems: [
{
type: 'number',
min: 0,
max: 100,
message: '数组元素必须为0-100',
},
{
required: true,
message: '数组元素不能为空',
},
],
},
],
}
api
str
str(minLen?: string, maxLen?: string)
.rule(assert: (value: number, fields: any) => boolean)
.required()
num
num(min?: number, max?: number)
.rule(assert: (value: number, fields: any) => boolean)
.required()
int
int(min?: number, max?: number)
.rule(assert: (value: number, fields: any) => boolean)
.required()
float
float(min?: number, max?: number)
.fixed(2)
.rule(assert: (value: number, fields: any) => boolean)
.required()
email(minLen?: number, maxLen?: number)
.rule(assert: (value: string, fields: any) => boolean)
.pattern(/@qq\.com^/, '请输入QQ邮箱')
.required()
url
url(minLen?: number, maxLen?: number)
.rule(assert: (value: string, fields: any) => boolean)
.required()
telephone
tel()
.rule(assert: (value: string, fields: any) => boolean)
.required()
mobile
mob()
.rule(assert: (value: string, fields: any) => boolean)
.required()
arr
arr(min?: number, max?: number)
.item(index: number, chain: Chain)
.items(chain: Chain)
.rule(assert: (value: any[], fields: any) => boolean)
.required()
obj
obj()
.properties(Record<{[field: any]: Chain}>)
.rule(assert: (value: any[], fields: any) => boolean)
.required()