- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
系列文章:
1、async-validator 源码学习(一):文档翻译
2、async-validator 源码学习笔记(二):目录结构
rule 主要实现的是校验规则,文件结构为下图:
其中 index.d.ts 文件:
declare const _default: {
required: import("..").ExecuteRule;
whitespace: import("..").ExecuteRule;
type: import("..").ExecuteRule;
range: import("..").ExecuteRule;
enum: import("..").ExecuteRule;
pattern: import("..").ExecuteRule;
};
export default _default;
是 rule 目录的统一出口管理,主要是给 errors 数组添加对应的 error 。
required.d.ts 文件:
import { ExecuteRule } from '../interface';
declare const required: ExecuteRule;
export default required;
主要作用是校验必填字段的规则。
其中 ExecuteRule 是来自于 interface.d.ts 文件中的
//摘自其中的一部分
export declare type ExecuteRule =(
rule: InternalRuleItem,
value: Value,
source: Values,
errors: string[],
options: ValidateOption,
type?: string
) => void;
/**
* 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.
*/
ExecuteRule 是统一定义的函数类型别名,统一了函数传递参数和返回值的类型。等价于:
declare const required(rule, value, source, errors, options, type)
方法内的参数及其意义如下:
type.d.ts
import { ExecuteRule } from '../interface';
declare const type: ExecuteRule;
export default type;
校验值的类型,可能的类型有:integer、float、array、regexp、object、method、email、number、data、url、hex
range.d.ts
import { ExecuteRule } from '../interface';
declare const range: ExecuteRule;
export default range;
校验是否满足最大最小值合理区间的规则
whitespace.d.ts
import { ExecuteRule } from '../interface';
/**
* Rule for validating whitespace.
*
* @param rule The validation rule.
* @param value The value of the field on the source object.
* @param source The source object being validated.
* @param errors An array of errors that this rule may add
* validation errors to.
* @param options The validation options.
* @param options.messages The validation messages.
*/declare const whitespace: ExecuteRule;
export default whitespace;
校验空白字符的规则
enum.d.ts
import { ExecuteRule } from '../interface';
declare const enumerable: ExecuteRule;
export default enumerable;
校验值是否存在枚举值列表中的规则
pattern.d.ts
import { ExecuteRule } from '../interface';
declare const pattern: ExecuteRule;
export default pattern;
校验正则表达式的规则
interface.d.ts 中定义 rule 单元格式
export interface RuleItem {
type?: RuleType; //类型
required?: boolean; //是否为空
pattern?: RegExp | string; //正则
min?: number; //最小值或长度
max?: number; //最大值或长度
len?: number; //长度
enum?: Array<string | number | boolean | null | undefined>; //校验值是否存在枚举值列表中的规则
whitespace?: boolean; //是否空白
fields?: Record<string, Rule>;//深度监听属性和规则
options?: ValidateOption;//选项
defaultField?: Rule; //校验属性内部值
transform?: (value: Value) => Value; //校验前转换
message?: string | ((a?: string) => string);//信息提示
//异步校验
asyncValidator?: (rule: InternalRuleItem, value: Value, callback: (error?: string | Error) => void, source: Values, options: ValidateOption) => void | Promise<void>;
//同步校验
validator?: (rule: InternalRuleItem, value: Value, callback: (error?: string | Error) => void, source: Values, options: ValidateOption) => SyncValidateResult | void;
}
//Rule 可以是一个对象,也可以是该对象的数组
export declare type Rule = RuleItem | RuleItem[];
rule 是本字段对应的校验规则:
{
field: "name",
fullField: "name",
message: "姓名为必填项",
required: false,
type: "string",
validator: ƒ required$1(rule, value, callback, source, options)
}
value 是本字段的值:如小明
source 是要校验的整个 source 对象:
{
name: '小明',
info: {
age: 17,
}
}
errors 是本次校验将要去添加的 errors 数组,假设之前没有 error,则 errors 为[],如果之前已经存在了一些 error,则格式如下所示:
[
{
message: '年龄超出范围',
field: 'info.age',
}
]
options 是该字段校验时的选项,当 message 属性为默认值时,格式如下:
{
firstFields: true,
messages: {
array: {len: "%s must be exactly %s in length", min: "%s cannot be less than %s in length", max: "%s cannot be greater than %s in length", range: "%s must be between %s and %s in length"},
clone: ƒ clone(),
date: {format: "%s date %s is invalid for format %s", parse: "%s date could not be parsed, %s is invalid ", invalid: "%s date %s is invalid"},
default: "Validation error on field %s",
enum: "%s must be one of %s",
number: {len: "%s must equal %s", min: "%s cannot be less than %s", max: "%s cannot be greater than %s", range: "%s must be between %s and %s"},
pattern: {mismatch: "%s value %s does not match pattern %s"},
required: "%s is required",
string: {len: "%s must be exactly %s characters", min: "%s must be at least %s characters", max: "%s cannot be longer than %s characters", range: "%s must be between %s and %s characters"},
types: {string: "%s is not a %s", method: "%s is not a %s (function)", array: "%s is not an %s", object: "%s is not an %s", number: "%s is not a %s", …},
whitespace: "%s cannot be empty",
}
}
实际项目开发中验证规则 rule 的写法:
const rules ={
//深度校验1
address: {
type: 'object',
required: true,
fields: {
//深度校验street属性
street: { type: 'string', required: true},
city: { type: 'string', required: true},
zip: {
type: 'string',
required: true,
len: 8,
message: 'invalid zip',
},
},
},
//校验 2 数组形式
username: [
{
type: 'string',
required: true,
whitespace: true,
transform(value) {
returnvalue.trim()
},
message: '用户名不能为空格',
//异步校验
asyncValidator: (rule, value) =>{
return new Promise((resolve, reject) =>{
setTimeout(() =>{
if (value != '') {
resolve()
} else{
reject('error')
}
}, 2000)
})
},
},
{
type: 'string',
min: 3,
max: 20,
message: '长度 3- 20 位',
},
],
}
当我尝试输入时,我正在关注 Ray Wenderlich ( https://videos.raywenderlich.com/screencasts/545-server-side-swift-wi
我正在使用 javax.validation.Validation 来验证 jpa 实体。我总是针对相同的实体进行验证。 我想知道是对所有验证使用一个 validator 更好,还是每次验证时实例化一
Controller : @RequestMapping(...) public void foo(@Valid Parent p){ } class Parent { @NotNull // j
在 login.phtml 中,validator 和 validate 之间有什么区别 - 有人可以解释下面每一行的含义 function onepageLogin(button)
我有一个 java bean 用于将 JSON 消息发送到 spring @RestController 并且我有 bean 验证设置并使用 @Valid 运行得很好。但我想转移到 Protobuf/
我正在使用 vee-validate 来验证注册表单,我编写了如下代码,
使用 有什么区别属性和 标签? 我应该什么时候使用哪一种? 最佳答案 validator属性允许您引用独立的托管 bean 方法,而不仅仅是像这样的验证器
我们有这个 Alamofire 错误处理: Alamofire.request(.GET, getUrl("mystuff")).responseData { response in guar
以下代码创建了两个单选按钮。每个选项都包含一个日期值,该日期值已成功转换为格式为“yyyy-MM-dd”的标签。一旦我做出选择并单击下一步按钮,我就会收到以下错误“j_idt12:comDateCho
是否有类似的验证: req.checkBody('property', 'should be present').isPresent(); 值本身并不重要。 现在我使用这个解决方案: .isLengt
系列文章: 1、async-validator 源码学习(一):文档翻译 2、async-validator 源码学习笔记(二):目录结构 3、async-validator 源码学习笔记(三):ru
我正在使用 Backbone.Validation插入。我有一个模型可以在服务器端进行唯一性检查。我如何让 backbone.validation 识别错误并运行我设置的回调以显示返回的错误消息? t
我有一个 Knockout.Validation 场景,我认为该场景相当普遍,但尚未通过在网络上搜索和本网站上的各种答案找到解决方案。 我正在验证的属性在 ajax 调用之后才会添加到可观察到的 kn
我是 Knockout JS 的新手。我需要一个验证器来验证用户将在文本框中输入的日期。为此编写了如下代码 ko.validation.rules['date'] = { validator:
如何在 JSF 验证器中比较两个字符串是否相等? if (!settingsBean.getNewPassword().equals(settingsBean.getConfirmPassword()
我有简单的域: package app class Customers { String CUSTOMER String NOTE static mapping = {
我正在使用 ember-validations 来验证表单中的模型。 如果我使用 createRecord 创建记录,则模型的实例已经过验证,因此在用户输入值之前表单已经显示验证错误。 我只想在提交表
我有两种不同的服务:第一个是将对象保存到数据库,第二个是更新现有对象。 我正在对我的对象使用验证约束,例如(@NotBlank、@Size、@Pattern 等),在第一种情况下,我需要验证对象的所有
我有 2 个 ensure - 验证装饰器用于 2 个字段:password 和 retypePassword。我想在填写 retypePassword 字段时检查这两个字段是否相等。 问题是,当我在
I'm aware that it's a bug ,但是在域类上调用 validate() 会覆盖之前放入的任何拒绝: def save = { def assignment = new A
我是一名优秀的程序员,十分优秀!