覆盖的优先级: 自定义规则 > 选项规则 > 默认规则
思路讲的多了。也不知道怎么讲了,下面大家直接看源码把。
源码
/*
* 流程: 绑定指令-> 设置配置(vaConfig) -> 校验(check) -> 报错(showErr) 或 自定义报错
*/var va = {};
function unique(arr){
var hashTable = {}, newArr = [];
for(var i = 0;i < arr.length;i++){
if(!hashTable[arr[i]]){
hashTable[arr[i]] = true;
newArr.push(arr[i]);
}
}
return newArr;
}
function addClass(dom, _class){
var hasClass = !!dom.className.match(new RegExp('(s|^)' + _class + '(s|$)'))
if(!hasClass){
dom.className += ' ' + _class
}
}
//校验函数
function check(v, conditions){
var res = 0; //0代表OK, 若为数组代表是某个字段的错误
//验证函数
var cfg = {
//非空
nonvoid: (v, bool)=>{
if(bool){
return v.trim() ? 0 : ['nonvoid'];
}else{
return 0;
}
},
reg:(v, reg)=> reg.test(v) ? 0 : ['reg'], //正则
limit:(v, interval)=> (+v >= interval[0] && +v <= interval[1]) ? 0 : ['limit', interval],
equal: (v, target)=>{ //和什么相等
var _list = document.getElementsByName(target), _target
for(var i = 0;i < _list.length;i++){
if(_list[i].className.indexOf('va') > -1){
_target = _list[i];
}
}
return (_target.value === v) ? 0 : ['equal', _target.getAttribute('tag')] },
unique:(v)=>{
var _list = document.getElementsByClassName('unique'),
valList = [].map.call(_list, item=>item.value)
return (unique(valList).length === valList.length) ? 0 : ['unique'] }
}
for(var i = 0;i < conditions.length;i++){
var condi = conditions[i],
type = condi.type,
typeVal = condi.typeVal
res = cfg[type](v, typeVal)
// console.log(res, v, type,typeVal)
//如果有自定义报错信息, 返回自定义的报错信息
console.log(res)
if(res){
res = condi.errMsg || res
break
}
}
return res;
}
function showErr(name, checkResult){
var type = checkResult[0],
ext = checkResult[1] || []
var ERR_MSG = {
nonvoid: `${name}不能为空`,
reg: `${name}格式错误`,
limit: `${name}必须在${ext[0]}与${ext[1]}之间`,
equal: `两次${ext}不相同`,
unique: `${name}重复`
}
//使用layer来报错,如果需要自定义报错方式,要把全文的layer集中起来包一层。
layer.msgWarn(ERR_MSG[type])
}
/**
* [VaConfig va配置的构造函数] * @param {[string]} type [校验类型,如reg, limit等等] * @param {[*]} typeVal [根据校验类型配置的值] * @param {[string]} errMsg [报错信息] * @param {[string]} name [用以ajax的字段名] * @param {[string]} tag [中文名,用以报错] */










