上篇 async-validator 源码解析(一):文档翻译 已经将ElementUI
和Ant Design
都依赖的async-validator
校验库的文档进行了翻译,下面继续来填坑分析 async-validator 的源码,理解表单校验的原理。可以从仓库 https://github.com/MageeLin/async-validator-source-code-analysis 的analysis
分支看到本篇中的每个文件的代码分析。
已完成:
- async-validator 源码解析(一):文档翻译
- async-validator 源码解析(二):rule
- async-validator 源码解析(三):validator
- async-validator 源码解析(四):Schema 类
- async-validator 源码解析(五):校验方法 validate
依赖关系
代码依赖关系如下所示:
按照从下到上的方式,本篇主要分析rule
目录和依赖的util.js
中的部分工具函数。
util.js
从文件名和依赖关系就能清晰的发现,util.js
是一个典型的工具函数库。rule
目录中主要依赖到的是 format
和 isEmptyValue
两个方法。
format
format
函数的作用是格式化参数,可以接收无数个参数,返回一个字符串,但是它是利用第一个入参来判断如何格式化。第一个参数是 function
类型,就直接执行这个格式化函数来返回字符串 message
;第一个参数若是 string
类型,就根据占位符和参数返回格式化后的字符串 message
。
1 | /* 格式化参数,根据第一个参数来决定怎么处理之后的参数 */ |
isEmptyValue
这一个方法是来判断是否为空值,但是它把字符串和数组单独拿了出来。如果 value
是字符串,则空字符串也算空值;如果 value
是数组,则空数组也算空值。
1 | /* 根据类型判断是否空值 */ |
rule
rule
目录中的每一个文件都 export
一个方法,这些方法的入参大致相同,如下:
@param rule
校验的规则@param value source
对象中该字段的值@param source
要校验的source
对象@param errors
本次校验将要去添加的errors
数组@param options
校验选项@param options.messages
校验的messages
这些方法的作用都是一样的,就是校验。如果校验通过,就继续执行;如果校验不通过,就给 errors
数组添加一个对应的新 error
。
这些入参的格式基本一致,举几个例子:
rule
是本字段对应的校验规则:
1 | { |
value
是本字段的值:如小明
source
是要校验的整个 source
对象:
1 | { |
errors
是本次校验将要去添加的 errors
数组,假设之前没有 error
,则 errors
为[]
,如果之前已经存在了一些 error
,则格式如下所示:
1 | [ |
options
是该字段校验时的选项,当 message
属性为默认值时,格式如下:
1 | { |
index.js
index.js
是 rule
目录的统一的出口管理,这些方法的主要作用就是给 errors
数组添加对应的 error
。
1 | import required from './required'; |
required.js
校验必填字段。
1 | // 导入util |
whitespace.js
校验空白字符。
1 | import * as util from '../util'; |
range.js
校验是否满足合理区间。
1 | import * as util from '../util'; |
pattern.js
校验正则表达式。
1 | import * as util from '../util'; |
enum.js
校验枚举值。
1 | import * as util from '../util'; |
type.js
校验值类型。这里比较有意思,用了一些比较简单的判断组合,将值分为了integer
、float
、array
、regexp
、object
、method
、email
、number
、date
、url
、hex
这几种类型。
1 | import * as util from '../util'; |
rule
目录分析完成,下一篇继续向上填坑 validator
目录。