iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何使用JavaScript策略模式校验表单
  • 826
分享到

如何使用JavaScript策略模式校验表单

2024-04-02 19:04:59 826人浏览 泡泡鱼
摘要

目录概述未使用策略模式的表单校验使用策略模式优化策略模式的优点总结概述 WEB项目中,登录,注册等等功能都需要表单提交,当把用户的数据提交给后台之前,前端一般要做一些力所能及的校验,

概述

WEB项目中,登录,注册等等功能都需要表单提交,当把用户的数据提交给后台之前,前端一般要做一些力所能及的校验,比如是否填写,填写的长度,密码是否符合规范等等,前端校验可以避免提交不合规范的表单。

假如我们有一个表单,校验逻辑如下:

  • 用户名不为空
  • 密码长度不低于6位
  • 手机号符合格式

未使用策略模式的表单校验

当没有使用策略模式时,即我们首先会想到的校验模式通常是这样的:


<body>
    <fORM id="reGISterForm">
        <label for="username">输入用户名:<input type="text" name="username"></label>
        <label for="passWord">输入密码:<input type="password" name="password"></label>
        <label for="phone">输入密码:<input type="text" name="phone"></label>
    </form>
    <script>
        const form = document.querySelector('.registerForm');
        form.onsubmit = function(){
            if(form.username.value === ''){
                alert('用户名不能为空')
                return;
            }
            if(form.password.value.length < 6){
                alert('密码长度不能小于6位')
                return;
            }
            if(!/(^1[3|5|8][0-9]{9}$)/.test(form.phone.value)){
                alert('手机号格式不正确')
                return;
            }
        }
    </script>
</body>

这种代码编写方式十分常见,但它的缺点同样很明显:

  • onsubmit函数过于庞大,包含很多if-else,要覆盖所有规则
  • onsubmit函数缺乏弹性,如果要进入一种新的校验规则,就要改函数的内容实现,违反开放-闭合原则
  • 代码复用性较差,如果再写一个表单,就要复制很多重复的代码

使用策略模式优化

首先封装校验函数为一个对象:


const strategies = {
    empty(value, errMsg){
        if(value.length === 0){
            return errMsg;
        }
    },
    minLength(value, len, errMsg){
        if(value.length < len){
            return errMsg;
        }
    },
    isMobile(value, errMsg){
        if(!/(^1[3|5|8][0-9]{9}$)/.test(value)){
            return errMsg;
        }
    }
}

我们还要一个Validator类, 这个类用于向目标表单添加验证规则,它的用法如下:


const validate = function(){
    const validator = new Validator();
    validator.add(Form.userName, 'empty', '用户名不能为空');
    validator.add(Form.password, 'minLength:6', '密码长度不能少于6位');
    validator.add(Form.phone, 'isMobile', '手机号码格式不正确');
    const errMsg = validator.start();
    return errMsg;
}

如代码所示,validator实例有add方法,接收3个参数,第一个为需要验证的表单实例,第二个为验证方法,冒号后面为传入的参数。第三个为验证未通过的错误提示信息。

start方法,用于启动校验,如果没通过会返回未通过的提示信息,可在之后的逻辑中进行处理

Validator类的编写:


class Validator {
    constructor(){
        this.rules = [];
    }
    add(elem, rule, err){
        const args_arr = rule.split(":");
        this.rules.push(()=>{
            const handler = args_arr.shift();
            args_arr.unshift(elem.value);
            args_arr.push(err);
            return strategies[handler].apply(elem, args_arr)
        })
    }
    start(){
        let errmsg = []
        for(let i = 0; i < this.rules.length; i++ ){
            const err = this.rules[i]();
            if(err){
                errmsg.push(err)
            }
        }
        return errmsg.join(",");
    }
}

使用策略模式,我们使用配置的方式完成了表单的校验,这些规则可以用在以后任何校验表单的地方,更方便修改与复用

为单一表单项增加多个验证规则

我们的代码现在有一个缺点,就是只能为某一个表单项赋单一验证规则,无法实现一个表单多个验证规则,所以代码还有优化的空间


class Validator{
    // ···
    add(elem, rules){
        rules.forEach(rule => {
            const args_arr = rule.strategy.split(":");
            this.rules.push(()=>{
                const handler = args_arr.shift();
                args_arr.unshift(elem.value);
                args_arr.push(rule.errMsg);
                return strategies[handler].apply(elem, args_arr)
            })
        });
    }
    // ···
}

const validate = function(){
    const validator = new Validator();
    validator.add(Form.username,[{
        strategy: 'empty',
        errMsg: '用户名不能为空'
    }]);
    validator.add(Form.password, [{
        strategy: 'minLength:6',
        errMsg: '密码长度不能少于6位'
    }]);
    validator.add(Form.phone, [{
        strategy: 'isMobile',
        errMsg: '手机号码格式不正确'
    }, {
        strategy: 'empty',
        errMsg: '手机号不能为空'
    }]);
    const errMsg = validator.start();
    return errMsg;
}

只需要传参时传入一个对象数组,并在add函数里面添加相应的数组处理逻辑即可

策略模式的优点

优点:

  • 避免多重条件选择语句
  • 实现开闭原则,使得函数的使用更加易于切换,易于理解,易于扩展。
  • 提高代码复用程度

总结

Peter Norvig说过,在函数作为一等对象的语言中,策略模式是隐形,strategy就是值为函数的变量。其实就是将封装好的策略函数当成参数传给使用它的target,被target调用的过程,用好策略模式,不仅让我们对该模式有更加深刻的理解,也使我们明白使用函数的好处。

以上就是如何使用javascript策略模式校验表单的详细内容,更多关于JavaScript资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何使用JavaScript策略模式校验表单

本文链接: https://www.lsjlt.com/news/124892.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用JavaScript策略模式校验表单
    目录概述未使用策略模式的表单校验使用策略模式优化策略模式的优点总结概述 Web项目中,登录,注册等等功能都需要表单提交,当把用户的数据提交给后台之前,前端一般要做一些力所能及的校验,...
    99+
    2024-04-02
  • 怎么使用JavaScript策略模式校验表单
    小编给大家分享一下怎么使用JavaScript策略模式校验表单,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript是一种什么语言javascript...
    99+
    2023-06-14
  • 如何使用策略模式与装饰模式扩展JavaScript表单验证功能
    这篇文章主要介绍了如何使用策略模式与装饰模式扩展JavaScript表单验证功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简单的表单验证...
    99+
    2024-04-02
  • 策略模式如何实现Vue动态表单验证
    这篇文章将为大家详细讲解有关策略模式如何实现Vue动态表单验证,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。策略模式(Strategy Pattern)又称政策模式,其定...
    99+
    2024-04-02
  • 如何使用JavaScript进行表单校验功能
    这篇文章主要介绍如何使用JavaScript进行表单校验功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文本框校验以下是文本框的校验步骤。1.获取待校验的文本框value值,2.对...
    99+
    2024-04-02
  • 如何掌握JavaScript策略模式
    如何掌握JavaScript策略模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JavaScript 中策略模式的使用什么是设计模式设想...
    99+
    2024-04-02
  • Vue中怎么利用策略模式实现动态表单验证
    Vue中怎么利用策略模式实现动态表单验证,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.  你曾见过的策略模式现在电子产品种类繁多...
    99+
    2024-04-02
  • 如何使用Spring实现策略模式
    本篇内容介绍了“如何使用Spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring 中 @Autowired注解,大...
    99+
    2023-06-27
  • 怎样用Javascript实现策略模式
    目录概述代码实现总结概述 策略模式是JavaScript设计模式中行为型的设计模式; 定义: 定义一系列算法,并将这些算法各自封装成策略类(方法),然后将不变的部分和变化的部分分离开...
    99+
    2024-04-02
  • vue 如何实现表单校验
    一、安装并使用 首先,在你的vue项目中进行安装: npm install --save vue-input-check 安装完成以后引入并注册: import in...
    99+
    2024-04-02
  • JavaScript中如何完成注册页面表单校验
    这篇文章主要为大家展示了“JavaScript中如何完成注册页面表单校验”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中如何完成注册页面表单...
    99+
    2024-04-02
  • element表单使用校验之校验失效问题详解
    目录第一种可能的错误: 字段错误第二种:触发校验错误validator总结首先是html必须正确,直接看代码示例: <el-form ref="form" :mode...
    99+
    2022-11-13
    element表单校验 element输入框校验 elementui表单单独校验
  • 如何使用JavaScript实现表单验证
    本篇内容介绍了“如何使用JavaScript实现表单验证”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、...
    99+
    2024-04-02
  • java策略模式如何实现
    本篇内容介绍了“java策略模式如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 刘备要到江东娶老婆了,走之前诸葛亮给赵云(...
    99+
    2023-06-19
  • Vue.js+Nuxt.js项目中如何使用Vee-validate表单校验
    小编给大家分享一下Vue.js+Nuxt.js项目中如何使用Vee-validate表单校验,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了...
    99+
    2024-04-02
  • JavaScript如何实现用户名和密码表单校验功能
    这篇文章主要介绍“JavaScript如何实现用户名和密码表单校验功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何实现用户名和密码表单校验功能”文章能帮助大家解决问题。代码...
    99+
    2023-07-04
  • 详解Java如何优雅的使用策略模式
    目录什么是策略模式策略模式结构策略模式适用场景简单示例项目实战场景用一坨坨代码实现策略模式重构代码代码实现总结最近这段时间,想给大家分享一下设计模式的一些用法以及在项目中怎么运用。 ...
    99+
    2023-02-27
    Java优雅使用策略模式 Java使用策略模式 Java策略模式
  • Vue中如何使用ElementUi同时校验多个表单
    小编给大家分享一下Vue中如何使用ElementUi同时校验多个表单,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码let&n...
    99+
    2024-04-02
  • JavaScript中策略模式的作用是什么
    本篇文章为大家展示了JavaScript中策略模式的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为Jav...
    99+
    2023-06-14
  • SpringBoot策略模式的实践使用
    目录前言实践使用总结优点:缺点:前言 在实际业务代码中,我们经常会碰到这样的代码: String type = actualService.getRealtype(uid); ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作