String 扩展文档
更新时间: 2025-12-25
📑 目录
核心特性
字符串可以直接调用链式方法
优势:
- ✅ 更简洁自然
- ✅ 减少代码量
- ✅ 100%向后兼容
替代方案(非侵入式)
如果你介意修改 String.prototype,可以直接使用 dsl() 包裹字符串:
可用方法
快速开始
详细示例
1. 正则验证
正确的错误码:
'required'- 必填字段'min'- 最小长度/值'max'- 最大长度/值'pattern'- 正则验证'format'- 格式验证(email/url等)'enum'- 枚举值
2. 自定义错误消息
消息模板变量:
{{#label}}- 字段标签{{#limit}}- 约束值(min/max){{#value}}- 当前值{{#pattern}}- 正则表达式
3. 自定义验证器
⚠️ .custom() 当前仅支持同步函数;需要异步查库或远程调用时,请在 validate() / validateAsync() 通过后于业务层单独执行。
支持的返回值:
- 不返回/
undefined→ 验证通过 ✅ - 返回字符串 → 验证失败(错误消息)
- 返回
{ error, message }→ 自定义错误码 - 抛出异常 → 验证失败
- 返回
true→ 验证通过 - 返回
false→ 验证失败(默认消息)
注意:
- 当前版本不支持在
.custom()中直接返回Promise;即使调用validateAsync(),异步 custom validator 仍会报同步验证不支持异步操作。 - 需要异步校验时,请改为:① 先用
schema-dsl做同步结构校验;② 再在业务层执行异步检查。
5. 默认验证器
username 预设:
'short'- 2-16'medium'- 3-32(默认)'long'- 5-64'3-32'- 自定义范围
phone 支持的国家:
'cn'- 中国(11位)'us'- 美国'uk'- 英国
password 强度:
'weak'- 6-64'medium'- 8-64(默认)'strong'- 8-64(大小写+数字)
6. 完整表单示例
多语言支持
方案1: 全局多语言配置(推荐)
方案2: 字段级多语言
方案3: 运行时动态切换
推荐方案: 方案1(全局配置) + 方案2(特殊字段覆盖)
安装与卸载
自动安装
String扩展在导入时自动安装:
手动禁用
重新启用
最佳实践
1. 简单字段用纯DSL
2. 复杂字段用链式调用
3. 遵循 80/20 法则
80%字段用纯DSL,20%字段用String扩展
常见问题
Q1: String扩展会污染全局吗?
A: 会扩展 String.prototype,但冲突概率极低。提供 uninstallStringExtensions() 可以卸载。
Q2: 性能如何?
A: 性能开销极小(<5%),测试显示反而更快(少了函数调用)。
Q3: TypeScript 支持吗?
A: 完全支持,通过类型定义文件。
Q4: 正确的错误码是什么?
A:
'required'- 必填'min'/'max'- 长度/值范围'pattern'- 正则'format'- 格式(email/url)'enum'- 枚举
Q5: 如何支持多语言?
A: 使用 Locale 全局配置(推荐)或字段级 .messages() 覆盖。
相关文档
对应示例文件
示例入口: string-extensions.ts
说明: 覆盖 String.prototype 扩展的安装/卸载、链式 .label() / .messages() / .pattern() 调用,以及校验成功/失败路径。
最后更新: 2026-05-08