class Validators {
constructor () {
this.validators = []
this.strategies = {}
}
// 增加一个输入框验证器
addValidator (rule, errMsg, value, ...rest) {
let ruleElements = rule.split(':')
this.validators.push(() => {
let strategy = ruleElements.shift()
let params = ruleElements
params.unshift(value)
params.unshift(errMsg)
return this.strategies[strategy].apply(this, params.concat(rest))
})
}
// 返回当前输入框验证器 产生的错误消息
getInvalidMsg (errMsg, value) {
return {
'value': value,
'errMsg': errMsg
}
}
// 逐个验证器校验
check () {
let validator = null
let len = this.validators.length
for (let i = 0; i < len; i++) {
validator = this.validators[i]
let result = validator()
if (result) {
return result
}
}
}
// 添加策略算法
addValidationStrategy (name, strategy) {
this.strategies[name] = strategy
}
importStrategies (strategies) {
for (let strategyName in strategies) {
this.addValidationStrategy(strategyName, strategies[strategyName])
}
}
}
const validationStrategies = {
isAccount (errMsg, value) {
if (/^(?=.*[a-zA-Z]+)(?=.*[0-9]+)[a-zA-Z0-9]+$/.test(value)) {
return this.getInvalidMsg(errMsg, value)
}
},
isNick (errMsg, value) {
// 汉字英文数字区分大小写下划线
if (!/^[u4e00-u9fa5a-zA-Z0-9_]+$/.test(value)) {
return this.getInvalidMsg(errMsg, value)
}
},
isNoEmpty (errMsg, value) {
if (value === '') {
return this.getInvalidMsg(errMsg, value)
}
},
isZhCN (errMsg, value) {
if (!(/^[u4e00-u9fa5]*$/).test(value)) {
return this.getInvalidMsg(errMsg, value)
}
},
minLength (errMsg, value, length) {
if (value.length < length) {
return this.getInvalidMsg(errMsg, value)
}
},
maxLength (errMsg, value, length) {
if (value.length > length) {
return this.getInvalidMsg(errMsg, value)
}
},
isMobile (errMsg, value) {
if (!/^1(d){10}$/.test(value)) {
return this.getInvalidMsg(errMsg, value)
}
},
isMail (errMsg, value) {
let reg = /^(w-*.*)+@(w-?)+(.w{2,})+$/
if (!reg.test(value)) {
return this.getInvalidMsg(errMsg, value)
}
},
isEqual (errMsg, value, appoint) {
if (value !== appoint) {
return this.getInvalidMsg(errMsg, value)
}
}
}
export { Validators, validationStrategies }
//使用
validateParams (params) {
var validators = new Validators()
validators.importStrategies(validationStrategies)
validators.addValidator('isNoEmpty', '请填写昵称', params.nickname)
if (this.__hasMutiIdentity) {
validators.addValidator('isNick', '请输入正确昵称', params.nickname)
validators.addValidator('minLength:6', '昵称长度位6~12位中文', params.nickname)
validators.addValidator('maxLength:12', '昵称长度位6~12位中文', params.nickname)
validators.addValidator('isAccount', '账号必须包含英文和数字', params.nickname)
validators.addValidator('minLength:6', '账号长度位6~12位中文', params.account)
validators.addValidator('maxLength:12', '账号长度位6~12位中文', params.account)
} else {
validators.addValidator('isZhCN', '昵称必须是中文', params.nickname)
validators.addValidator('minLength:2', '昵称长度位2~6位中文', params.nickname)
validators.addValidator('maxLength:6', '昵称长度位2~6位中文', params.nickname)
validators.addValidator('isNoEmpty', '请填写手机号', params.phone)
validators.addValidator('isMobile', '请填写正确的手机号', params.phone)
validators.addValidator('isNoEmpty', '请填写验证码', params.captcha)
validators.addValidator('isEqual', '请输入正确的验证码', params.captcha.length, 6)
}
validators.addValidator('isNoEmpty', '请填写密码', params.password)
validators.addValidator('isNoEmpty', '请确认密码', params.confirmPassword)
validators.addValidator('isEqual', '两次密码输入不一致', params.password, params.confirmPassword)
var result = validators.check()
if (result) {
this.showErrorTip(result.errMsg)
return false
} else {
return true
}
}