阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
Schema 里写着
format: date
,坏日期却通过了校验,不一定是库出了 bug。
format
的处理方式取决于验证器配置。拿到一个“校验成功”,先问它到底检查了类型、结构,还是也检查了日期语义。
看似相同的两次校验
2026-02-30
是字符串,也长得像日期,但二月没有第三十天。只检查正则外形,会漏掉这类问题。下面用 Python 的
jsonschema
对照默认验证器与显式启用
FormatChecker
的结果。
用一个不可能存在的日期试探配置
from jsonschema import Draft202012Validator, FormatChecker
schema = {"type": "string", "format": "date"}
structural = Draft202012Validator(schema)
strict = Draft202012Validator(schema, format_checker=FormatChecker())
def valid(v, value):
return not list(v.iter_errors(value))
assert valid(structural, "2026-02-30")
assert not valid(strict, "2026-02-30")
assert valid(strict, "2024-02-29")
assert not valid(strict, "2025-02-29")
assert not valid(strict, "26/09/2026")
assert not valid(strict, 20260926)
合成示例只验证
date
。其他格式可能有可选依赖或实现差异,应在锁定环境中逐项测试。未知格式名称也不能被当作已经实施了某种检查;拼写错误可能让你得到毫无意义的安全感。
日期格式不是日期解释规则
来源中的
03/04/2026
可能代表三月四日,也可能代表四月三日。把它转换为 ISO 形式之前,需要来源地区、字段说明或明确协议。通过
date
校验只能说明转换后的值有效,不能证明你选对了月份。
来源情况
应做什么
不该做什么
不存在的日历日期
报错并回看原文
自动滚动到下个月
日月顺序不明
标记歧义
根据服务器语言猜测
带时间与时区
使用独立时间协议
随手截取前十字符
字段为空
按缺失规则处理
补成当天日期
把配置也纳入回归测试
测试集中至少放一个合法闰日、一个非法闰日和一个格式错误值。部署时跑这些反例,比只看 Schema 文件是否存在更有效。若服务跨语言实现,分别验证相同测试集,不要假定两个验证器默认行为一致。
译稿审查保留原始日期
把日期提取结果用于
OmniDoc(产品入口)
译稿核对时,建议同时保存
raw_text
与规范化值。审校员需要看到“原文是什么”和“系统怎样解释”,才能定位是翻译、提取还是格式转换造成的差异。
参考:
JSON Schema 字符串与 format
。
- 1 -
更新于 2026-10-08