<!-- 验证数字 -->
<div>
number验证
<input type="text" id="number">
<span id="numberText"></span>
</div>
<!-- 验证邮箱 -->
<div>
email验证
<input type="text" id="email">
<span id="emailText"></span>
</div>
<script>
// 策略模式 跟状态模式相似 但是还不一样
// 策略模式 没有状态而言,只是直接调用内部函数
// 比如 表单验证
let InputVerification = function(){
// 将验证正则写在这个对象内部
let strategy = {
number : function (value) {
return /^[0-9]+(\.[0-9]+)?$/.test(value) ? "" : '请输入数字';
},
phone : function (value) {
return /^\d{3}\-\d{8}$|^\d{4}\-\d{7}$/.test(value) ? "" : "请输入正确的电话号码格式"
}
}
// 对外暴露接口
// check 验证
// addStrategy 添加其他 验证方式
return {
check : function(type,value){
value = value.replace(/^\s+|\s+$/g,"");
return strategy[type] ? strategy[type](value) : "没有该类型的检测方法";
},
addStrategy : function (type,fn) {
strategy[type] = fn;
}
}
}()
// 案例背景 做一个简单的 input的验证 以及 添加一个 验证邮箱的正则
// 初始化 变量
let number = document.getElementById('number');
let numberText = document.getElementById('numberText');
let email = document.getElementById('email');
let emailText = document.getElementById('emailText');
number.onblur = function(){
numberText.innerHTML = InputVerification.check('number',this.value);
}
email.onblur = function(){
InputVerification.addStrategy('email',function(value){
return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value) ? "" : "请输入正确的邮箱"
})
emailText.innerHTML = InputVerification.check('email',this.value);
}
</script>
策略模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一.观察者模式,实现:通知和KVO 触发机制: 一个对象(观察者),观察另一个对象(被观察者)的某...
- 中介者模式 在一些很多对象之间会存在一定的交互,例如像即时聊天软件中的语言视频通话,这种就有很多的界面变化、如呼入...
- 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互...
- 1.创建型:单例设计模式、抽象工厂设计模式 2.结构型:MVC 模式、装饰器模式、适配器模式、外观模式、组合模式 ...