// utils/validator.js
import {isArray, isFunction} from "@/utils/dataType";
import {Message} from "element-ui";
const validatorEmpty = function (value) {
return !!value;
}
const validatorMinLength = function (value, ruleValue) {
return value.length >= ruleValue
}
const validatorMaxLength = function (value, ruleValue) {
return value.length <= ruleValue
}
const validatorLength = function (value, ruleValue) {
return value.length <= ruleValue
}
const validatorEqual = function (value, ruleValue) {
return value !== ruleValue
}
const Validator = function (value, ruleValue) {
this.value = value
this.ruleValue = ruleValue
}
const systemMethodMap = {
'empty': validatorEmpty,
'minLength': validatorMinLength,
'maxLength': validatorMaxLength,
'length': validatorLength,
'equal': validatorEqual
}
const systemMethodMapKeys = Object.keys(systemMethodMap)
for (let systemMethodMapKey of systemMethodMapKeys) {
Validator.prototype[systemMethodMapKey] = function() {
return systemMethodMap[systemMethodMapKey](this.value, this.ruleValue)
}
}
export const validatorForm = function (rules) {
let _validate = false
if (isArray(rules)) {
for (let i = 0; i < rules.length; i++) {
let item = rules[i]
let {value, rule, errorMsg, validator} = item
let validate = false
if (rule) {
if (rule.includes(':')) {
const ruleArray = rule.split(':')
const ruleValue = ruleArray[1]
rule = ruleArray[0]
validate = new Validator(value, ruleValue)[rule]()
} else {
validate = new Validator(value)[rule]()
}
if (!validate) {
_validate = validate
Message.warning(errorMsg)
break
}
} else if(isFunction(validator)) {
const errMsg = validator(value)
if (errMsg) {
_validate = validate
Message.warning(errorMsg)
break
}
}
}
}
return _validate
}
使用
rules是一个数组,每一项是一个对象,该对象有4个参数
value 要验证的值
rule 内置规则名称
errorMsg 错误提示
validator 自定义验证函数, 返回错误信息
当使用rule是,则无法使用自定义验证函数