all files / src/ validate.js

92.31% Statements 36/39
83.33% Branches 25/30
100% Functions 12/12
92.31% Lines 36/39
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78          16× 16× 16× 16×     14× 35×   14× 14× 14× 12× 10× 10×             14×                                                   12× 11×      
export default class Validator {
  constructor() {}
  static add(name, fn) {
    Validator.prototype[name] = fn
  }
  validate(data, rules) {
    let errors = {}
    rules.forEach(ruleItem => {
      let value = data[ruleItem.key]
      if (ruleItem.required) {
        let errorText = this.required(value)
        if (errorText) {
          ensureArray(errors, ruleItem.key)
          errors[ruleItem.key].push(errorText)
          return
        }
      }
      let validators = Object.keys(ruleItem).filter(
        key => key !== 'key' && key !== 'required'
      )
      validators.forEach(validator => {
        Eif (validator) {
          let errorText = this[validator](value, ruleItem[validator])
          if (errorText) {
            ensureArray(errors, ruleItem.key)
            errors[ruleItem.key].push(errorText)
          }
        } else {
          throw `不存在的验证器${validator}`
        }
      })
    })
    return errors
  }
  required(value) {
    if (!value && value !== 0) {
      return '必填'
    }
  }
  isEmpty(errors) {
    return Object.keys(errors).length <= 0
  }
  pattern(value, pattern) {
    if (pattern === 'email') {
      pattern = /^.+@.+$/
    }
    if (pattern === 'phone') {
      pattern = /^1\d{10}$/
    }
    Iif (pattern === 'idCard') {
      pattern = /(^[1-9]\d{14}$)|(^[1-9]\d{16}([0-9]|X)$)/
    }
    Iif (pattern === 'idBank') {
      pattern = /^[1-9]\d{14,20}$/
    }
    if (pattern.test(value) === false) {
      return '格式不正确'
    }
  }
  minLength(value, minLength) {
    Eif (value.length < minLength) {
      return `密码长度不能小于${minLength}`
    }
  }
 
  maxLength(value, maxLength) {
    Eif (value.length > maxLength) {
      return `长度不能大于${maxLength}位`
    }
  }
}
 
function ensureArray(obj, key) {
  if (Object.prototype.toString.call(obj[key]) !== '[object Array]') {
    obj[key] = []
  }
}