欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

验证策略模式实现

程序员文章站 2022-03-29 18:15:34
...


// 定义策略var strategy = {
    isNotEmpty: function(value, errorMsg){
        if(value === ''){            
        return errorMsg;
        }
    },
    minLength: function(value, length, errorMsg){
        if(value.length < length){            
        return errorMsg;
        }
    },
    mobileFormat: function(value, errorMsg){
        if(!/(^1[3|5|8][0-9]{9}$)/.test(value)){            
        return errorMsg;
        }
    }
}function Validator() {
    this.cache = [];
}
Validator.prototype.add = function(value, rules){
    for(var i = 0, rule; rule = rules[i++];){        
    var self = this;
        (function(rule){
            self.cache.push(function(){
                var strategyRule = rule.strategy.split(':');                
                var strategyName = strategyRule.shift();                // 各位看官注意啦, 如果直接使用[value].concat(strategyRule.push(rule.errorMsg))会出问题
                // 什么问题呢? 
                // strategyRule.push(rule.errorMsg)这货会返回length, 我TM调试了半天!
                strategyRule.push(rule.errorMsg);                
                var arr = [value].concat(strategyRule);                
                return strategy[strategyName].apply(null,arr);
            })
        })(rule);
    }
}
Validator.prototype.check = function(){
    for(var i = 0, checkFn; checkFn = this.cache[i++];){        
    var msg = checkFn();        
    if(msg){            
    return msg;
        }
    }
}var validator = new Validator();
validator.add('12345', [
    {
        strategy: 'isNotEmpty',
        errorMsg: 'in not empty'
    },
    {
        strategy: 'minLength:10',
        errorMsg: 'length is less than 10'
    }
]);var tip = validator.check(); // tip: length is less than 10

以上就是验证策略模式实现的详细内容,更多请关注其它相关文章!