Porco Schema Validate (psv)
(自2.1.7版本之后,数组的定义改变,支持数组嵌套)
psv 是一款轻量级 js 数据格式验证工具,相比于其他功能齐备的验证工具,psv 的优势在于体积非常小(之所以要写它,就是因为对其他 validate 框架不满意,我只是想要一个格式化验证工具,却给我一个 1M 的项目),最开始的核心代码只有 130 行。
下载、安装
npm install psv --save
yarn add psv
使用
首先你需要定义出自己的 schema,比如:
var schema = str: type: String // string 类型 required: true // 是否必填,默认为 false max: 3 // 最大长度 min: 2 // 最小长度 enum: '12' '13' '14' // 枚举 regex: '^[8-9]*$' // 正则 // 正则(兼容老版本,不推荐使用,优先级低,当它与 regex 同时出现时会被忽略) pattern: '^[5-9]*$' error: // 自定义错误提示 type: '类型错误' required: '必填错误' max: '不能超过最大长度' min: '不能低于最小长度' enum: 'enum 必须正确' regex: '正则验证错误' pattern: '正则验证错误' num: type: Number required: true max: 3 // 最大长度 min: 1 // 最小长度 enum: 1 2 3 // 枚举 error: // 自定义错误提示 type: '类型错误' required: '必填错误' max: '不能超过最大值' min: '不能低于最小值' enum: 'enum 必须正确' boo: type: Boolean required: true error: // 自定义错误提示 type: '类型错误' required: '必填错误' arr: type: Array required: true max: 3 // 最大长度 min: 2 // 最大长度 error: // 自定义错误提示 type: '类型错误' required: '必填错误' max: '不能超过最大长度' min: '不能低于最小长度' obj: type: Object required: true error: // 自定义错误提示 type: '类型错误' required: '必填错误' ;
schema 是预先定义的数据格式,接下来将会拿 data 与 schema 进行比对, 对于一个 schema 来说只有 type 字段是必填的,其他都可以缺省。
var data = str: '12' num: 2 boo: true array: 1 2 obj: {}
接着我们导入并创建 Psv 对象进行验证
; { const psv = schema data; const validate = psv; if !validate psv; }
api
-
数据类型
- String
- type
- default // 默认值
- trim // 去除数据两边空格,默认 false
- required
- max
- min
- enum
- regex
- pattern
- error (自定义错误提示,可使用默认值)
- type (type 错误提示信息)
- required (required 错误提示信息)
- max (max 错误提示信息)
- min (min 错误提示信息)
- enum (enum 错误提示信息)
- regex (regex 错误提示信息)
- pattern (pattern 错误提示信息)
- Number
- type
- default
- required
- max
- min
- enum
- error
- type
- required
- max
- min
- enum
- Array
- type
- default
- required
- max
- min
- error
- type
- required
- max
- min
- Boolean
- type
- default
- required
- error
- type
- required
- Object
- type
- default
- required
- error
- type
- required
- String
-
函数
- validate // 验证入口
- printErrors // 打印错误信息
- getErrors // 获取错误信息
注意:当 type = Object 时,说明该字段可以是任何 js 基本类型或对象,甚至可以是 一个 函数(慎用)。
4.1.0 之后,全面支持 default 默认值,default 可以是任何值,String 添加 trim 去空格支持。default 以及 trim 都支持无限嵌套
const schema = key1: type: String default: '123' ;const data = {};const psv = schema data;const res = psv;// data.key1 === '123'
const schema = key1: type: String trim: true ;const data = key1: ' 123';const psv = schema data;const res = psv;// data.key1 === '123'
同样,psv 支持嵌套定义
const schema2 = str2: type: String required: true const schema = str1: type: schema2 required: true ;
(如果对使用有疑问,可以参考 test 目录下代码)