async-validator 源码学习笔记(四):validator
系列文章:
1、async-validator 源码学习(一):文档翻译
2、async-validator 源码学习笔记(二):目录结构
3、async-validator 源码学习笔记(三):rule
源码目录结构如图:
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<T extends any[] = unknown[]> = 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;
async-validator 源码学习笔记(四):validator的更多相关文章
- yii2源码学习笔记(四)
继续了解组件Component.php /** * Returns a value indicating whether a property is defined for this componen ...
- async-validator 源码学习笔记(五):Schema
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- async-validator 源码学习笔记(六):validate 方法
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- async-validator 源码学习笔记(三):rule
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 rule 主要实现的是校验规则,文件结构为下图: 一.rul ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- Underscore.js 源码学习笔记(下)
上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...
- Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构
Hadoop源码学习笔记(5) ——回顾DataNode和NameNode的类结构 之前我们简要的看过了DataNode的main函数以及整个类的大至,现在结合前面我们研究的线程和RPC,则可以进一步 ...
- JDK源码学习笔记——LinkedHashMap
HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序. LinkedHashMap保证了元素迭代的顺序.该迭代顺序可以是插入顺序或者是访问顺序.通过维护一个 ...
- jquery源码学习笔记三:jQuery工厂剖析
jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...
随机推荐
- 踩坑系列-Java Calendar
Calendar是Java util包下的日期Api,其中获取月份是当前月份-1 public class Demo { public static void main(String[] args) ...
- 3、架构--cp、scp、rsync、实时监控与同步
笔记 1.晨考 1.VPN的搭建步骤 2.vpn中的iptables是什么作用? 网络转发 2.昨日问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 ...
- Solution -「CF 555E」Case of Computer Network
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \(m\) 条边的无向图,判断是否有给每条边定向的方案,使得 \(q\) 组有序点对 \((s,t)\) ...
- Centos 7.6 使用 kubekey 部署 kubesphere v3.1.0
文章目录 主要功能 硬件要求 Kubernetes版本要求 配置主机之间的免密 安装所需依赖 下载KubeKey 创建Kubernetes集群以及KubeSphere kk命令使用方式 修改配置文件 ...
- 注意!你的 Navicat 可能被下毒了...
大家早上好,我是程序猿DD! 刚刚看到一份来自微步在线发布的威胁情报通报,其中提到了被我们广泛应用的数据库管理工具Navicat Premium被投毒消息!如果你有用过相关版本的话,可能当前正处于数据 ...
- 本地虚拟机在NAT网络连接模式下如何设置才可以访问外网以及使用Xshell远程连接
本文演示环境: 笔记本电脑系统:windows 7 虚拟机系统:CentOS 7 虚拟化软件:VMware Workstation 12 远程连接工具:Xshell 5 第一步: 打开虚拟网络编辑器 ...
- SpringBoot+JavaMailSender+Redis完整找回密码功能
导入maven坐标 <parent> <groupId>org.springframework.boot</groupId> <artifactId>s ...
- Virtual Box 中的虚拟系统无法调整分辨率(无法自适应窗口大小)
关于 Virtual Box 中安装好虚拟机后无法调整分辨率,即无法随 vbox 窗口大小自动调整内部虚拟机的屏幕. 网上找了百度了一遍,很多方法并不凑效,好在最后解决了,现将过程记录,以飨来者. 1 ...
- 【C# TAP 异步编程】四、SynchronizationContext 同步上下文|ExecutionContext
一.同步上下文(SynchronizationContext)概述 由来 多线程程序在.net框架出现之前就已经存在了.这些程序通常需要一个线程将一个工作单元传递给另一个线程.Windows程序以消息 ...
- Codeforces Round #773 (Div. 2)D,E
D. Repetitions Decoding 传送门 题目大意: 一个长为 n ( n 2 ≤ 250000 ) n(n^2\leq250000) n(n2≤250000)的序列,每个元素 a i ...