验证策略模式实现
程序员文章站
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
以上就是验证策略模式实现的详细内容,更多请关注其它相关文章!
下一篇: PHP建站中最常见的错误总结