Home >Web Front-end >JS Tutorial >Verify strategy pattern implementation

Verify strategy pattern implementation

一个新手
一个新手Original
2017-09-22 09:47:341343browse


// 定义策略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(&#39;:&#39;);                
                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(&#39;12345&#39;, [
    {
        strategy: &#39;isNotEmpty&#39;,
        errorMsg: &#39;in not empty&#39;
    },
    {
        strategy: &#39;minLength:10&#39;,
        errorMsg: &#39;length is less than 10&#39;
    }
]);var tip = validator.check(); // tip: length is less than 10

The above is the detailed content of Verify strategy pattern implementation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn