热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

asyncvalidator源码学习笔记(四):validator

系列文章:1、async-validator源码学习(一):文档翻译2、async-validator源码学习笔记(二):目录结构3、async-validator源码学习笔记(三

系列文章:

1、async-validator 源码学习(一):文档翻译

2、async-validator 源码学习笔记(二):目录结构

3、async-validator 源码学习笔记(三):rule

源码目录结构如图:

async-validator 源码学习笔记(四):validator

 

validator 源码分析

validator 与 rule 紧密相连,rule 目录下的文件主要功能是校验 value 和 rule ,然后给 errors 数组中添加 error 。validator 则是把 校验的 value 细分成各种类型,对不同的类型进行不同的 rule 校验组合,便于回调函数 callback 对最终的 errors 数组做最终的处理。

校验流程如下:

1、校验方法结构相同,第一步先判断是否需要进行校验:

  • 字段是必须的。
  • 字段是非必须的,但 source 对象中的该字段有值且不为空。

2、如果是需要校验的,校验的步骤为:

  • 先校验是否为空。
  • 校验该字段不为空的 rule。
  • 再校验该类型对应的其他的 rule。

3、校验完成之后,最后开始执行回调,用回调函数返回 errors 。

validator 文件夹中的 index.d.ts:

是 validator 目录的统一出口管理。

declare const _default: {
 string: import("..").ExecuteValidator;
 method: import("..").ExecuteValidator;
 number: import("..").ExecuteValidator;
 boolean: import("..").ExecuteValidator;
 regexp: import("..").ExecuteValidator;
 integer: import("..").ExecuteValidator;
 float: import("..").ExecuteValidator;
 array: import("..").ExecuteValidator;
 object: import("..").ExecuteValidator;
 enum: import("..").ExecuteValidator;
 pattern: import("..").ExecuteValidator;
 date: import("..").ExecuteValidator;
 url: import("..").ExecuteValidator;
 hex: import("..").ExecuteValidator;
 email: import("..").ExecuteValidator;
 required: import("..").ExecuteValidator;
 any: import("..").ExecuteValidator;
};
export default _default;

 

import("..").ExecuteValidator 限制类型,ExecuteValidator 被定义在 interface.ts 文件内。

// 摘自其中一部分
/**
 *  Performs validation for any type.
 *
 *  @param rule The validation rule.
 *  @param value The value of the field on the source object.
 *  @param callback The callback function.
 *  @param source The source object being validated.
 *  @param options The validation options.
 *  @param options.messages The validation messages.
 */
export declare type ExecuteValidator = (
  rule: InternalRuleItem, 
  value: Value, 
  callback: (error?: string[]) => void, 
  source: Values, 
  options: ValidateOption
 ) => void;

 

上述的解释翻译为中文:

/*
执行任何类型验证
@param rule 校验的规则
@param value 需要校验字段的当前值
@param callback 回调函数
@param source 需要校验的字段
@param options 校验选项
@param options.message 校验的 messages
*/

any.d.ts

校验任意类型只需要一步,校验不为空即可。

import { ExecuteValidator } from '../interface';
declare const any: ExecuteValidator;
export default any;

 

array.d.ts

校验数组。

import { ExecuteValidator } from '../interface';
declare const array: ExecuteValidator;
export default array;

 

校验数组,一般需要两步:1、校验非空数组。2、校验范围。

array?: {
 len?: ValidateMessage<[FullField, Range]>;
 min?: ValidateMessage<[FullField, Range]>;
 max?: ValidateMessage<[FullField, Range]>;
 range?: ValidateMessage<[FullField, Range, Range]>;
};

 

boolean.d.ts

import { ExecuteValidator } from '../interface';
declare const boolean: ExecuteValidator;
export default boolean;

 

date.d.ts

校验时间。

import { ExecuteValidator } from '../interface';
declare const date: ExecuteValidator;
export default date;
declare type ValidateMessage = string | ((...args: T) => string);
date?: {
 format?: ValidateMessage;
 parse?: ValidateMessage;
 invalid?: ValidateMessage;
};

 

enum.d.ts

校验枚举值。

import { ExecuteValidator } from '../interface';
declare const enumerable: ExecuteValidator;
export default enumerable;
enum?: ValidateMessage<[FullField, EnumString]>;

 

float.d.ts

校验浮点数。

import { ExecuteValidator } from '../interface';
declare const floatFn: ExecuteValidator;
export default floatFn;

 

integer.d.ts

校验整数。

import { ExecuteValidator } from '../interface';
declare const integer: ExecuteValidator;
export default integer;

 

method.d.ts

import { ExecuteValidator } from '../interface';
declare const method: ExecuteValidator;
export default method;

 

number.d.ts

import { ExecuteValidator } from '../interface';
declare const number: ExecuteValidator;
export default number;

 

校验数字,一般需要两步:1、校验不为空。2、校验范围。

number?: {
 len?: ValidateMessage<[FullField, Range]>;
 min?: ValidateMessage<[FullField, Range]>;
 max?: ValidateMessage<[FullField, Range]>;
 range?: ValidateMessage<[FullField, Range, Range]>;
};

 

object.d.ts

校验对象,一般需要两步:1、校验不为空。2、校验类型。

import { ExecuteValidator } from '../interface';
declare const object: ExecuteValidator;
export default object;

 

pattern.d.ts

需要两步。第一步校验不为空,第二步校验 pattern。

import { ExecuteValidator } from '../interface';
declare const pattern: ExecuteValidator;
export default pattern;

 

regexp.d.ts

校验正则表达式。

import { ExecuteValidator } from '../interface';
declare const regexp: ExecuteValidator;
export default regexp;

 

type.d.ts

import { ExecuteValidator } from '../interface';
declare const type: ExecuteValidator;
export default type;

 


推荐阅读
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文介绍了如何在React和React Native项目中使用JavaScript进行日期格式化,提供了获取近7天、近半年及近一年日期的具体实现方法。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 本文介绍了如何在 Node.js 中使用 `setDefaultEncoding` 方法为可写流设置默认编码,并提供了详细的语法说明和示例代码。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ... [详细]
  • 在尝试从数据库获取设置的过程中,遇到了一个致命错误:Fatal error: Call to a member function bind_param() on boolean。本文将详细分析该错误的原因,并提供解决方案。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
    本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ... [详细]
author-avatar
麦豪小仙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有