ajv 格式
防御: 删除
peerDependencies让它依靠蛋蛋.
Ajv 的 JSON Schema 格式
使用量
// ESM/TypeScript import
import Ajv from "ajv"
import addFormats from "ajv-formats"
// Node.js require:
const Ajv = require("ajv")
const addFormats = require("ajv-formats")
const ajv = new Ajv()
addFormats(ajv)
格式
软件包定义了这些格式:
- 日期: 根据 RFC3339 (法语)。 。 。 .
- 时间:时间(时间区是强制性的).
- 日期时间:日期-时间(时间-区是强制性的).
- 同时: 时间带有可选的时区.
- 时间:带有可选时区的日期-时间.
- 会期: 从 RFC3339 (法语)
- 乌里:全URI. .
- 微量参考:URI参考文献,包括完整和相亲的URI.
- 尿温: 根据 RFC6570 (法语)
- url 密码 (折旧): URL 记录。 。 。 .
- 电子邮件: 电子邮件地址.
- 主机名: 主机名称 RFC1034 (法语)。 。 。 .
- ipv4 数据: IP地址为v4.
- ipv6 数据: IP地址为v6.
- 正则:通过将字符串传递到 RegExp 构造器来测试一个字符串是否是一个有效的正则表达式.
- 乌伊德: 通用唯一标识符 RFC4122 导弹。 。 。 .
- json-指针: JSON指针根据 RFC6901 (法语)。 。 。 .
- 相对 json 指针根据 本草案。 。 。 .
- 字节: 基数64根据 打开 Api 3.0.0 规格
- 单位32: 根据 打开 Api 3.0.0 规格
- 单位64: 根据 打开 Api 3.0.0 规格
- 浮动: 根据 打开 Api 3.0.0 规格
- 双: 根据 打开 Api 3.0.0 规格
- 密码: 根据 打开 Api 3.0.0 规格
- 二进制: 二进制字符串 打开 Api 3.0.0 规格
参见用于格式验证的正则表达式和用于格式验证的源 格式.ts 类型。 。 。 .
请注意: JSON Schema 草案07 也定义了格式 iri, (中文(简体) ), iri-reference, (中文(简体) ), idn-hostname 财务报告和审定财务报表 idn-email 用于URL、主机名和带有国际字符的电子邮件。 这些格式可用于 ajv-formats-草案2019 插件 .
用于比较数值的关键字 : formatMaximum 编号 : formatMinimum 财务报告和审定财务报表 formatExclusiveMaximum 编号 : formatExclusiveMinimum
当格式关键词定义命令时,这些关键词可以定义最小/最大限制(compare 函数在格式定义中).
这些关键字添加到 ajv 实例中, 当 ajv 格式用于没有选项或带有选项时 keywords: true。 。 。 .
这些关键字仅适用于字符串. 如果数据不是字符串,则验证成功.
关键词的值 formatMaximum编号 :formatMinimum 财务报告和审定财务报表 formatExclusiveMaximum编号 :formatExclusiveMinimum 应该是一个字符串或 数据参考。这个值是允许数据有效的最大(最小)值,由 format 关键词 若为 format 关键词不为当前计划编译将丢出例外 .
当这些关键字被添加时,它们也会在格式中添加比较功能 "date", (中文(简体) ), "time" 财务报告和审定财务报表 "date-time"。用户定义的格式也可以有比较功能。 见 添加格式 方法.
require("ajv-formats")(ajv)
const schema = {
type: "string",
format: "date",
formatMinimum: "2016-02-06",
formatExclusiveMaximum: "2016-12-27",
}
const validDataList = ["2016-02-06", "2016-12-26"]
const invalidDataList = ["2016-02-05", "2016-12-27", "abc"]
选项
选项可以通过第二个参数传递. 选项值可以是
- 添加到 ajv 实例中的格式名称列表 :
addFormats(ajv, ["date", "time"])
请注意: 当 ajv 遇到未定义的格式时, 它会丢出例外( 除非 ajv 实例被配置到 strict: false 选项)。 为了允许特定的未定义格式,它们必须通过 ajv 实例传递给 formats 选项 true 值 :
const ajv = new Ajv({formats: {date: true, time: true}}) // to ignore "date" and "time" formats in schemas.
- 格式验证模式( 默认为
"full"),可选的格式名称列表和keywords选项以添加其他格式比较关键字:
addFormats(ajv, {mode: "fast"})
或者说
addFormats(ajv, {mode: "fast", formats: ["date", "time"], keywords: true})
单位 "fast" 以下格式被简化: "date", (中文(简体) ), "time", (中文(简体) ), "date-time", (中文(简体) ), "iso-time", (中文(简体) ), "iso-date-time", (中文(简体) ), "uri", (中文(简体) ), "uri-reference", (中文(简体) ), "email"。例如, "date", (中文(简体) ), "time" 财务报告和审定财务报表 "date-time" 不验证区域 "fast" 模式,只有字符串结构,以及其他格式有简化正则表达式.
测试
npm install
git submodule update --init
npm test