You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:53:09