如何自定义class-transformer的@Regex装饰器简化DTO字段处理?
实现自定义@Regex装饰器
要封装出你想要的@Regex装饰器,直接基于class-transformer的@Transform创建自定义装饰器即可,具体实现如下:
1. 编写自定义装饰器
新建一个装饰器文件(例如regex-transform.decorator.ts),把正则清理逻辑封装进去:
import { Transform, TransformFnParams } from 'class-transformer'; // 替换成你实际的正则清理逻辑,这里示例为转义正则特殊字符 function sanitizeRegex(value: string): string { return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } export function Regex() { return Transform(({ value }: TransformFnParams) => { return value && sanitizeRegex(value); }); }
2. 在DTO中使用简化写法
现在就可以用@Regex装饰器替代原有的@Transform逻辑,让代码更简洁:
import { IsString } from "class-validator"; import { Regex } from "./regex-transform.decorator"; export class SearchRequestDto { @Regex() @IsString() readonly term: string = ''; }
注意点
- 若
sanitizeRegex是独立的工具函数,记得在装饰器文件中正确导入 - class-transformer装饰器会优先于class-validator执行,因此先完成输入清理再做字符串校验,逻辑和原代码保持一致
内容的提问来源于stack exchange,提问作者Saeid Asadi
相关产品推荐
相关产品推荐

