validator

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在写程序的时候经常需要进行数据校验,比如服务端对http请求参数校验,数据入库时对字段长度进行校验,接口参数校验,...
    dayspring阅读 9,886评论 0 9
  • 工作的需要:由于mongodb文档格式灵活,缺乏关系型数据库的范式与数据检查约束,因而必须在代码层面做数据约束。于...
    dolphin叔叔阅读 467评论 0 0
  • validator百度博客一大堆,本文是摘取的部分内容结合在项目中使用的经验. 一.导入maven依赖 二.给需要...
    从入门到脱发阅读 4,967评论 0 2
  • 2018年12月的第一天,冬天的太阳暖暖的,我需穿过玻璃隔断的同事的办公司来远远地望着这冬日里灿烂的阳光,由于自己...
    海英_b043阅读 147评论 0 0
  • 这几天持续失眠。 无论是午休还是晚上睡觉都翻来覆去的睡不着。 想了很多事情。 我开始明白,以前自己太多事不懂,很容...
    落叶夏天阅读 326评论 3 1