在建造者模式中动态创建表单时,用户的输入是任意的,显然这是不允许的,我们需要过滤掉用户不合理的输入并加以提示,过滤器模式允许开发人员通过不同的标准过滤一组对象,并通过逻辑运算将他们连接起来。
实例中根据表单的要求,设计输入为空过滤器,邮箱格式过滤器,长度过滤器,并根据用户的输入给出结果,其类图结构如下:
代码实现:
var Filter = Class.extend({
controls:[],
ctor:function(_controls = []){
this.controls = _controls;
},
addControl:function(_control){
this.controls.push(_control);
},
filter:function(){
return [];
}
});
var EmailFilter = Filter.extend({
filter:function(){
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
for(var i in this.controls){
var txt = document.getElementById(this.controls[i].id).value;
if(!myreg.test(txt))
{
console.log(this.controls[i].label + "不符合邮件格式");
}
}
}
});
var LengthFilter = Filter.extend({
filter:function(){
for(var i in this.controls){
var txt = document.getElementById(this.controls[i].id).value;
if(txt.length < 6){
console.log(this.controls[i].label + "长度不能小于6");
}
}
}
});
var EmptyFilter = Filter.extend({
filter:function(){
for(var i in this.controls){
var txt = document.getElementById(this.controls[i].id).value;
if(txt == ""){
console.log(this.controls[i].label + "不能为空");
}
}
}
});
<body>
<form id = "form1" action = "#" method = "post">
</form>
</body>
<script>
var empty_filter,email_filter,length_filter;
(function(){
var name = new Input("邮箱","username","username","text");
var password = new Input("密码","password","password","password");
var submit = new Button("提交","sub","sub",submitForm);
var form = new Form("form1",[]);
form.addControl(name).addControl(password).addControl(submit).build();
empty_filter = new EmptyFilter();
length_filter = new LengthFilter();
email_filter = new EmailFilter();
empty_filter.addControl(name);
empty_filter.addControl(password);
email_filter.addControl(name);
length_filter.addControl(password);
})();
function submitForm(){
empty_filter.filter();
email_filter.filter();
length_filter.filter();
}
</script>
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。