• 表单验证封装


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

    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;
      }
    }
    
  • 相关阅读:
    创建客户区窗口,列表框之间项的拖拽操作......(zz)
    在VC的工具条中加入组合框控件(zz)
    丁磊:做一个有分析能力的人
    vc6中CComboBox的使用
    如何在程序中修改控件的字体
    在vc6中如何创建dll
    如何在vc的拆分窗口中使用CFormView派生类
    如何让多文档程序在启动时不创建文档?
    成都国嵌嵌入式linux必修实验手册完整版以及实验源码
    Thinkpad E420/E520/E420S/E220S 刷BIOS SLC2.1 激活OEM win7
  • 原文地址:https://www.cnblogs.com/mapletao/p/7738695.html
Copyright © 2020-2023  润新知