策略模式的文本校验

策略模式由两部分组成:一部分是由可以替换的算法对象集合组成的策略类,另一部分是接受外部请求并将请求委托给策略组中某个对象的环境类

以下为策略模式下的文本校验,以后用时可以随意添加策略类:

// 策略模式表单校验

var strategies = {
  isNoEmpty: function(value) {
    if (value === '') {
      return false
    }
    return true
  },
  minLength: function(value, exdata) {
    var length = exdata[0]
    if (value.length < length) {
      return false
    }
    return true
  },
  maxLength: function(value, exdata) {
    var length = exdata[0]
    if (value.length > length) {
      return false
    }
    return true
  },
  isMobile: function(value) {
    if (!(/^1[3|4|5|8][0-9]\d{4,8}$/.test(value))) {
      return false
    }
    return true
  }
}

var validataTest = function(str, arr) {
  if (!(arr instanceof Array) || (typeof str !== 'string')) {
    return {
      state: false,
      errmsg: '参数错误!'
    }
  }
  if (arr.length == 0) {
    return {
      state: true,
      errmsg: '无规则,直接通过校验'
    }
  }
  var result = {
    state: true,
    errmsg: '通过校验!'
  }
  for (var i = 0; i < arr.length; i++) {
    if (!strategies[arr[i].strategy](str, arr[i].exdata)) {
      result.state = false
      result.errmsg = arr[i].errmsg
      break
    }
  }
  return result
}

module.exports = validataTest

THE END!