// 定义策略
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
策略模式实现(验证)
最新推荐文章于 2022-08-28 09:34:07 发布