博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式设计表单校验
阅读量:6551 次
发布时间:2019-06-24

本文共 1916 字,大约阅读时间需要 6 分钟。

  1. 第一步我们要把这些校验逻辑都封装成策略对象:
    //策略对象var strategies = {    isNonEmpty: function (value, errorMsg) {        if (value === '') {            return errorMsg        }    },    minLength: function (value, length, errorMsg) {        if (value.length < length) {            return errorMsg        }    },    isMobile: function (value, errorMsg) {        if (!/(^1[3|5|8][0-9]{9}$)/.test(value)) {            return errorMsg        }    }}
  2. 接下来我们准备实现Validator类,validator类在这里作为context,负责接收用户的请求,并委托给strategy对象。在给出Validator类的代码之前,有必要提前了解用户是如何向Validator类发送请求的,代码如下
    var form = document.getElementById('registerForm');var btn = document.getElementById('submit');btn.onclick = function(){    console.log(form.userName.value)    var validator = new Validator();    validator.add(form.userName, [        {strategy: 'isNonEmpty', errorMsg: '用户名不能为空'},        {strategy: 'minLength:6', errorMsg: '用户名长度不能小于6'}    ])    validator.add(form.password, [        {strategy: 'minLength:6', errorMsg: '密码长度不能小于6'}    ])    validator.add(form.phoneNumber, [        {strategy: 'isMobile', errorMsg: '手机号格式不正确'}    ])    var error = validator.start();    if (error) {        alert(error)    }    return false}
  3. Validator类的实现
    var Validator = function () {    this.cache = []}Validator.prototype.add = function (dom, rules) {    var self = this    for (var i = 0, rule; rule = rules[i++];) {        (function (rule) {            var strategyArr = rule.strategy.split(':');            var errorMsg = rule.errorMsg            self.cache.push(function () {                var strategy = strategyArr.shift()                strategyArr.unshift(dom.value)                strategyArr.push(errorMsg)                return strategies[strategy].apply(self, strategyArr)            })        })(rule)    }}Validator.prototype.start = function () {    for (var i = 0, fun; fun = this.cache[i++];) {        var errorMsg = fun()        if (errorMsg) return errorMsg    }}

转载地址:http://vifco.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
scrapy_novel_python
查看>>
C++语言学习(十三)——C++对象模型分析
查看>>
java读写文件大全
查看>>
vue2.0自学教程(一):走进vue2.0大观园
查看>>
JNDI学习总结(1)——JNDI入门简介
查看>>
Spring的常用注解
查看>>
mysql中没有序列,怎么自动生成主键
查看>>
Dubbo学习总结(4)——Dubbo基于Zookeeper实现分布式实例
查看>>
EMC测试
查看>>
我的友情链接
查看>>
第十章apache的安全设置
查看>>
pomelo添加过滤器
查看>>
浓缩版:云计算运维KVM监控工具之Sensu开源版
查看>>
ThinkSNS 操作成功 失败 跳转
查看>>
个人主页数据添加
查看>>
精致妆容回避五大化妆死角
查看>>
【Thread】- JUC 5种线程同步工具
查看>>
PHP中使用file_get_contents()抓取网页乱码的问题
查看>>
java 防止 XSS 攻击的常用方法总结
查看>>