class Validator {
static add (name, fn) {
Validator.prototype[name] = fn
}
constructor () {}
validate (data, rules) {
let errors = {}
rules.forEach((rule) => {
let value = data[rule.key]
if (rule.required) {
let error = this.required(value)
if (error) {
ensureObject(errors, rule.key)
errors[rule.key].required = error
return
}
}
// 遍历 validators,并逐一调用对应的函数
let validators = Object.keys(rule).filter(key => key !== 'key' && key !== 'required')
validators.forEach((validatorKey) => {
if (this[validatorKey]) {
let error = this[validatorKey](value, rule[validatorKey])
if (error) {
ensureObject(errors, rule.key)
errors[rule.key][validatorKey] = error
}
} else {
throw `不存在的校验器: ${validatorKey}`
}
})
})
return errors
}
required (value) {
if (value !== 0 && !value) {
return '必填'
}
}
pattern (value, pattern) {
if (pattern === 'email') {
pattern = /^.+@.+$/
}
if (pattern.test(value) === false) {
return '格式不正确'
}
}
minLength (value, minLength) {
if (value.length < minLength) {
return '太短'
}
}
maxLength (value, maxLength) {
if (value.length > maxLength) {
return '太长'
}
}
}
function ensureObject (obj, key) {
if (typeof obj[key] !== 'object') {
obj[key] = {}
}
}
export default Validator
validator
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 在写程序的时候经常需要进行数据校验,比如服务端对http请求参数校验,数据入库时对字段长度进行校验,接口参数校验,...
- 工作的需要:由于mongodb文档格式灵活,缺乏关系型数据库的范式与数据检查约束,因而必须在代码层面做数据约束。于...
- validator百度博客一大堆,本文是摘取的部分内容结合在项目中使用的经验. 一.导入maven依赖 二.给需要...