ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

为数据质量装上门禁:hucre Schema校验9种规则实战指南

为数据质量装上门禁:hucre Schema校验9种规则实战指南 为数据质量装上门禁hucre Schema校验9种规则实战指南【免费下载链接】hucreZero-dependency spreadsheet engine. Read write XLSX, CSV, ODS. Pure TypeScript, works everywhere.项目地址: https://gitcode.com/gh_mirrors/hu/hucrehucre 是一个零依赖的纯 TypeScript 电子表格引擎支持读取和写入 XLSX、CSV、ODS 三种格式。除了读写它还内置了 Schema 校验能力——validateWithSchema函数可以让你的数据在进入系统之前先过一道门禁必填检查、类型转换、正则匹配、枚举白名单……一套 Schema 定义搞定。本文带你用 9 种规则给数据质量装上完整的门禁从新手示例到生产级配置一次讲清。为什么需要给数据装门禁想象一下常见的场景业务方发来一份 Excel 报表价格列里混进了 9.99元状态列里写着 启用 / active / 1 各种写法必填的姓名偶尔留空……如果这些数据直接入库后面每一个环节都要为脏数据擦屁股。hucre 的 Schema 校验就是那道门禁数据先声明应该长什么样引擎逐行逐列检查不合格的直接报出行号、列名、原始值和错误原因。快速上手一行命令装上门禁hucre 的 Schema 校验函数在包主入口直接导出见 src/index.tsimport { readFile, validateWithSchema } from hucre const workbook await readFile(products.xlsx) const schema { name: { column: Name, type: string, required: true, min: 1 }, price: { column: Price, type: number, required: true, min: 0 }, sku: { column: SKU, type: string, pattern: /^[A-Z]{2,4}-\d$/ }, active: { column: Active, type: boolean, default: true }, } const { data, errors } validateWithSchema(workbook.sheets[0].rows, schema)返回值是两个数组data是校验通过并转换好的对象数组errors是每条问题的详细报告。核心实现位于 src/_schema.ts类型定义见 src/_types.ts。9 种 Schema 校验规则完整清单hucre 的每个字段SchemaField支持以下 9 种规则按需组合即可#规则字段作用一句话示例1 列定位column/columnIndex按表头名忽略大小写和空格或列序号定位列column: Price2✅ 必填检查required空值直接报错required: true3 类型转换typestring/number/integer/boolean/date五种type: number4 正则匹配pattern字符串格式检查pattern: /^SKU-\d$/5 边界值min/max数字取范围字符串取长度min: 0, max: 10006️ 枚举白名单enum值必须在允许列表中enum: [S, M, L]7 自定义函数validate任意业务逻辑可返回自定义错误文案validate: v v.startsWith(SKU-)8 数据变换transform校验通过后清洗数据transform: v v.trim().toUpperCase()9 默认值default单元格为空时自动填充default: active 引擎内部按固定流水线依次执行必填 → 默认值 → 类型转换 → 正则 → 边界 → 枚举 → 自定义 → 变换见 src/_schema.ts某一步失败该字段即置为null并记录错误不影响其他字段继续检查。逐条规则实战要点1️⃣ 列定位表头名 or 列序号column按表头匹配忽略大小写和首尾空格 Name 也能匹配Name表头行由选项headerRow指定默认第一行。如果表头不固定或干脆没有表头就用columnIndex0 起始按位置取列并将headerRow设为-1。2️⃣ 必填检查小心0 和 false 也是有效值required: true时空值null、空字符串、纯空格会报错但0、false被视为合法值不会误报——这是很多自研校验容易踩的坑hucre 已经帮你处理好了见 src/_schema.ts 的空值判定。3️⃣ 类型转换五种类型都有宽容模式类型转换是隐藏的重头戏每种类型都内置了实用的宽容逻辑number1,234.56自动去掉千分位逗号变成1234.56true/false转成1/0integer42.0可接受3.14会被拒绝booleanyes、no、1、0、true大小写不敏感都能正确转换dateExcel 序列号自动转Date对象ISO 字符串2024-01-15直接解析string数字、布尔、日期都能安全转字符串并顺手 trim这些行为都有对应测试覆盖见 test/schema.test.ts。4️⃣ 正则匹配只作用于字符串pattern只对类型为string或转换后是字符串的字段生效适合校验邮箱、SKU 编码、手机号格式等email: { column: Email, type: string, pattern: /^[^][^]\.[^]$/ }5️⃣ 边界值数字管范围字符串管长度min/max会智能识别字段类型对数字比较大小min: 0拦截负价格对字符串比较长度min: 2, max: 10约束编码长度一个字段配置覆盖两种场景。6️⃣ 枚举白名单状态字段的救星status: { column: Status, type: string, enum: [active, inactive, archived] }超出白名单会报错且错误信息会列出全部允许值Status must be one of: active, inactive, archived排查起来非常直观。7️⃣ 自定义函数业务逻辑想怎么写就怎么写validate返回true通过返回false用通用错误返回字符串则作为自定义错误文案可以直接告诉用户SKU 必须以 SKU- 开头。跨字段、查库等复杂逻辑都能塞进来。8️⃣ 数据变换校验通过后顺手清洗transform在所有校验通过后执行适合做统一大写、去空格、9.99变分单位999这类标准化处理——注意它不影响校验只影响最终输出。9️⃣ 默认值空单元格的兜底方案active: { column: Active, type: boolean, default: true }空值含整列缺失自动填充默认值避免下游到处写?? active。生产级配置3 个选项让它稳起来validateWithSchema的第三个参数提供 3 个选项完整定义见 src/_schema.ts选项默认值用途headerRow0表头行位置0 起始无表头时传-1skipEmptyRowsfalse跳过全空行避免整行空行刷爆错误报告errorModecollectcollect收集全部错误throw遇到第一个错误立即抛出ValidationError 批量导入场景建议collect一次把所有问题反馈给业务方实时写入管道建议throw快速失败。读懂校验报告每条错误自带案发现场每条错误都是一个SchemaValidationIssue记录包含 5 个字段见 src/_types.tsrow1 起始的行号直接定位到表格那一行column列名或列序号message人类可读的错误描述value出问题的原始值方便回查fieldSchema 中的字段名方便程序化处理不想写代码CLI 一条命令完成校验hucre 自带命令行validate子命令实现见 src/cli/commands.ts用 JSON 文件描述 Schema即可直接校验文件hucre validate products.xlsx --schema products.schema.json全部通过输出Valid! N row(s) passed validation.有问题则逐条列出前 20 条错误并以非零码退出非常适合塞进 CI 流水线当数据门禁。实战组合示例员工信息导入把 9 种规则组合起来就是一份生产级导入 Schema摘自 test/schema.test.ts 的真实用例const schema { id: { column: ID, type: integer, required: true }, name: { column: Full Name, type: string, required: true, min: 2 }, email: { column: Email, type: string, required: true, pattern: /^[^][^]\.[^]$/ }, salary: { column: Salary, type: number, min: 0, max: 1_000_000 }, department: { column: Dept, type: string, enum: [Engineering, Sales, HR, Marketing], transform: (v) String(v).trim() }, startDate: { column: Start Date,type: date }, isManager: { column: Manager, type: boolean, default: false }, }这份 Schema 一行数据能同时接住85,000 带逗号薪资、yes 写成经理标记、Excel 序列号日期、部门名带空格、Manager 列整列缺失……校验完得到的data就是干净的、类型正确的对象数组可直接入库或导出 JSON。深入阅读清单 想了解看这里校验引擎完整实现src/_schema.tsSchema 相关类型定义src/_types.ts全部行为测试含产品/员工导入集成用例test/schema.test.tsCLI validate 命令src/cli/commands.tshucre 零依赖、纯 TypeScript、支持 Tree-shakingSchema 校验只是它给电子表格数据加上的第一道防线。下一站可以去看看它的流式读取能力把门禁直接装进大文件管道里。【免费下载链接】hucreZero-dependency spreadsheet engine. Read write XLSX, CSV, ODS. Pure TypeScript, works everywhere.项目地址: https://gitcode.com/gh_mirrors/hu/hucre创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表