• 表单验证封装


    目的: 对表单元素进行字段验证并返回错误处理数据

    1: 定义验证字段结构,验证数据类,value表示需要验证的字段的值,id表示验证的字段key,rules里面定义规则数组,type表示类型,errmessge表示失败错误提示i,value表示验证规则。

    type: 提供验空,长度,最大长度,最小长度判断,另外还可自定义验证规则,自定义规则为正则表达式

    代码如下:

    export class VerifyData {
      value = ''; // 验证数据
      id = ''; // 验证字段
      rules: VerifyRule[] = []; // 验证规则
    }
    export class VerifyRule {
      type = ''; // 验证规则类型 isRequired 验空 length 长度判断 minLength 最小长度 maxLength 最大长度 customRule 自定义规则(正则表达式)
      errMessage = ''; // 错误信息 
      value: any = null; // 验证规则
    }

    2:定义验证结果返回类型,字段包括id,验证字段,message,错误数据,代码如下:

    export class ErrorVerify {
      id = ''; // 验证字段
      message: string[] = []; // 错误信息
    }
    

    3:定义一个单例对象,实现验证功能。

    思路: 1: 循环处理验证数据

        2: 循环处理每个验证数据项的验证规则

        3: 定义type类型处理函数

    优化: 1: 一检测到错误立即退出函数

    最终代码如下:

    export const FormDriver{
     /*
      *  表单验证
      *  verifiesData : 验证数据对象
      *  once: 为true只返回一条错误信息 选填
      * */
      checkForm(verifiesData: VerifyData[], once?: boolean): ErrorVerify[] {
        const result: ErrorVerify[] = [];
        if (!verifiesData) {
          return result;
        }
        verifiesData.some(item => {
          const p = {
            id: item.id,
            message: []
          };
          p.message = this.rulesHandle(item, once);
          if (p.message.length > 0) {
            result.push(p);
          }
          if (result.length > 0 && once) {
            return true;
          }
        });
        return result;
      },
      /*
      * 验证规则并获取输出错误信息
      * */
      rulesHandle(verifyData: VerifyData, once?: boolean): string[] {
        const result: string[] = [];
        verifyData.rules.some(rule => {
          const verifyResult = this.ruleTypeCheckHandle(verifyData.value, rule);
          if (verifyResult) {
            result.push(verifyResult);
          }
          if (result.length > 0 && once) {
            return true;
          }
        });
        return result;
      },
      /*
      * 验证规则处理
      * */
      ruleTypeCheckHandle(value: string, rule: VerifyRule): string {
        let result = null;
        switch (String(rule.type)) {
          case 'isRequired':
            if (!value.trim()) {
              result = rule.errMessage;
            }
            break;
          case 'length':
            if (String(value).trim().length !== Number(rule.value)) {
              result = rule.errMessage;
            }
            break;
          case 'minLength':
            if (String(value).trim().length < Number(rule.value)) {
              result = rule.errMessage;
            }
            break;
          case 'maxLength':
            if (String(value).trim().length > Number(rule.value)) {
              result = rule.errMessage;
            }
            break;
          case 'customRule':
            if (!rule.value.test(value)) {
              result = rule.errMessage;
            }
            break;
        }
        return result;
      }
    }
    
  • 相关阅读:
    Java 破解谷歌翻译api,可以实现程序自动化翻译文章
    如何搭建高可用redis架构?
    架构师带你玩转分布式锁
    Java8内存模型—永久代(PermGen)和元空间(Metaspace)
    【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南
    kafka为什么这么优秀!
    讲道理,为什么分布式一定要有Redis?
    Windows系统内存分析工具的介绍
    colspan width issue
    OpenGL ES3 非常好的系列文章
  • 原文地址:https://www.cnblogs.com/mapletao/p/7738695.html
Copyright © 2020-2023  润新知