revalidator 内置 11 种 format 格式速查email、url、date-time 等 JSON Schema 格式验证一篇搞定【免费下载链接】revalidatorA cross-browser / node.js validator powered by JSON Schema项目地址: https://gitcode.com/gh_mirrors/re/revalidatorrevalidator 是同时运行在浏览器和 Node.js 上的轻量级 JSON Schema 验证器它内置的 11 种 formatemail、url、ip-address、date-time 等覆盖了日常开发中几乎全部的格式验证场景。本文一次讲清全部 11 种 revalidator format 格式每种格式的规则、有效/无效示例和容易踩的坑。一、三分钟上手 revalidator安装依赖npm install revalidator用revalidator.validate(obj, schema)校验对象格式验证只需在字段里加一行formatvar revalidator require(revalidator); var result revalidator.validate( { email: meexample.com, homepage: not-a-url }, { properties: { email: { type: string, format: email }, homepage: { type: string, format: url } } } ); console.log(result.valid); // false console.log(result.errors); // [{ attribute: format, property: homepage, ... }]返回值固定是{ valid, errors }结构格式不通过时attribute为format。REST 服务中的完整用法可参考example/webservice.js。二、11 种 format 格式完整速查表#format验证对象✅ 有效示例❌ 无效示例1email电子邮箱地址userexample.comuser.com2urlhttp/https/ftp/git 链接http://test.com/hello3ip-addressIPv4 地址192.168.1.1256.1.1.14ipv6IPv6 地址完整 8 段2001:0db8:85a3:0000:0000:8a2e:0370:73342001:db8::15date-timeISO 8601 UTC 日期时间2025-01-01T12:00:00Z2025-01-01 12:006date日期2025-01-0101/01/20257time时间12:30:4512:308colorCSS 颜色值#ff0000、red#ffff9host-name主机名/域名www.example.com123.45610utc-millisec毫秒时间戳数字1735689600000173568960000011regex合法正则表达式字符串^[a-z]$[unclosed全部 11 个格式的正则/函数定义都集中在lib/revalidator.js的validate.formats第 121-146 行与validate.formatExtensions第 151-153 行两段对照源码阅读成本极低。三、网络类格式验证url、email、ip-address、ipv6、host-name3.1 url使用率最高但有个隐藏开关url识别http、https、ftp、git四种协议端口、路径、查询串、锚点都允许例如https://example.com:8080/api?a1#top可以通过。⚠️最重要的坑url并不在默认的格式表里而是单独定义在validate.formatExtensions扩展表中。如果选项里传了validateFormatExtensions: falseurl会被静默跳过校验、恒为通过第四节详述。3.2 email大小写不敏感的邮箱校验支持标准的本地名 域名结构本地名允许.、、_等符号域名支持国际化字符范围整体匹配不区分大小写。user.nametagsub.example.co这类常见写法都能通过。3.3 ip-address 与 ipv6两种 IP 写法ip-addressIPv4每段 0-255因此256.10.1.1会被判无效ipv6IPv6只支持xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx的完整 8 段写法2001:db8::1这类::缩写不会通过。需要支持缩写时请改用pattern自写正则。3.4 host-name宽松的主机名匹配匹配若干标签段 点分隔的主机名结构每段须以字母开头。注意它是非锚定匹配不固定结尾只要开头能对上即通过因此比 email 的域名部分更宽松。四、日期时间格式验证date、time、date-time、utc-millisec4.1 date 与 time严格定长date必须是YYYY-MM-DD四-二-二数字如2025-01-0101/01/2025斜杠写法不接受time必须是HH:MM:SS二-二-二数字秒不能省略。4.2 date-time必须 UTC、必须以 Z 结尾格式为YYYY-MM-DDTHH:MM:SS(.sss)?Z三条硬性要求必须以Z结尾UTC 时间08:00时区偏移不通过小数毫秒可选出现时只能是 1-3 位日期与时间之间用T连接不能是空格。2025-01-01T12:00:00.123Z与2025-01-01T12:00:00Z都合法。4.3 utc-millisec只认数字类型它的实现是值是 number 且 ≥ 0所以1735689600000通过字符串1735689600000失败。接收前端传来的字符串时间戳时需先转数字或配合cast选项处理。五、其他格式验证color 与 regex5.1 colorCSS 颜色三写法十六进制#fff或#ff0000rgb(r,g,b)函数数值可带正负号和%16 个具名颜色red、blue、green、white、black等。5.2 regex校验输入本身是合法正则值必须是字符串且能成功构造RegExp例如^[a-z]$。适合用户传入过滤规则、黑名单正则这类场景防止一条坏正则让服务崩溃。六、最容易踩坑的 4 个 format 选项调用revalidator.validate(obj, schema, options)时下面几个选项直接决定格式验证的行为选项默认值作用validateFormatstrue总开关false时所有格式验证整体跳过validateFormatsStrictfalsetrue时未识别的 format 名也会报错false则静默忽略validateFormatExtensionstruefalse时url唯一的扩展格式不再校验additionalPropertiestrue是否允许 schema 未声明的额外字段两个推荐组合最严格{ validateFormats: true, validateFormatsStrict: true }把format: emaill这种拼写错误也当作报错只查类型长度{ validateFormats: false }格式验证全部关闭。默认非严格模式下format 名写错不会被发现、直接跳过——这是实际项目里最常见的坑。七、自定义格式验证错误消息默认报错是英文例如is not a valid email。在字段上加messages即可中文化{ properties: { contact: { type: string, format: email, messages: { format: 邮箱格式不正确 } } } }之后错误对象变为{ attribute: format, property: contact, expected: email, actual: not-email, message: 邮箱格式不正确 }可直接展示给最终用户。八、总结revalidator format 验证速查清单共 11 种内置格式默认表 10 种email、ip-address、ipv6、date-time、date、time、color、host-name、utc-millisec、regex 扩展格式 1 种url三大高频坑url受validateFormatExtensions开关控制、ipv6不支持::缩写、utc-millisec只接受数字内置格式不够用时用pattern或conform自写规则各 schema 字段的完整说明见README.mdtest/validator-test.js中的format相关用例是确认行为的好参考。【免费下载链接】revalidatorA cross-browser / node.js validator powered by JSON Schema项目地址: https://gitcode.com/gh_mirrors/re/revalidator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考