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依赖 二.给需要...