最近在用nest做后台系统,涉及到了入参校验的问题,图个方便,就选用了class-validator
作为校验工具,顺便整理了一下工具的一些Api,记录一下,方便日后查询使用
- 装饰器说明
- 常见的验证装饰器
- @IsDefined(value: any) 检查值是否已定义(!== undefined, !== null)。这是唯一忽略
- skipMissingProperties 选项的装饰器。
- @IsOptional() 检查给定值是否为空(=== null,=== 未定义),如果是,则忽略该属性上的所有验证器。
- @Equals(comparison: any) 检查值是否等于(“===”)比较。
- @NotEquals(comparison: any) 检查值是否不等于 ("!==") 比较。
- @IsEmpty() 检查给定值是否为空(=== ''、=== null、=== 未定义)。
- @IsNotEmpty() 检查给定值是否不为空(!== '',!== null,!== 未定义)。
- @IsIn(values: any[]) 检查 value 是否在允许值的数组中。
- @IsNotIn(values: any[]) 检查 value 是否不在不允许的值数组中。
- 类型验证装饰器
- @IsBoolean() 检查值是否为布尔值。
- @IsDate() 检查值是否为日期。
- @IsString() 检查字符串是否为字符串。
- @IsNumber(options: IsNumberOptions) 检查值是否为数字。
- @IsInt() 检查值是否为整数。
- @IsArray() 检查值是否为数组
- @IsEnum(entity: object) 检查值是否为有效枚举
- 数字验证装饰器
- @IsDivisibleBy(num: number) 检查值是否是可被另一个整除的数字。
- @IsPositive() 检查值是否为大于零的正数。
- @IsNegative() 检查值是否为小于零的负数。
- @Min(min: number) 检查给定数字是否大于或等于给定数字。
- @Max(max: number) 检查给定数字是否小于或等于给定数字。
- 日期验证装饰器
- @MinDate(date: Date) 检查值是否是指定日期之后的日期。
- @MaxDate(date: Date) 检查值是否是在指定日期之前的日期。
- 字符串类型验证装饰器
- @IsBooleanString() 检查字符串是否为布尔值(例如“true”或“false”)。
- @IsDateString() @IsISO8601() 的别名。
- @IsNumberString(options?: IsNumericOptions) 检查字符串是否为数字。
- 字符串验证装饰器
- @Contains(seed: string) 检查字符串是否包含种子。
- @NotContains(seed: string) 检查字符串是否不包含种子。
- @IsAlpha() 检查字符串是否只包含字母 (a-zA-Z)。
- @IsAlphanumeric() 检查字符串是否只包含字母和数字。
- @IsDecimal(options?: IsDecimalOptions) 检查字符串是否为有效的十进制值。默认 IsDecimalOptions 是 force_decimal=False, decimal_digits: '1,', locale: 'en-US'
- @IsAscii() 检查字符串是否仅包含 ASCII 字符。
- @IsBase32() 检查字符串是否为 base32 编码。
- @IsBase64() 检查字符串是否为 base64 编码。
- @IsIBAN() 检查字符串是否为 IBAN(国际银行帐号)。
- @IsBIC() 检查字符串是 BIC(银行识别代码)还是 SWIFT 代码。
- @IsByteLength(min: number, max?: number) 检查字符串的长度(以字节为单位)是否在一个范围内。
- @IsCreditCard() 检查字符串是否为信用卡。
- @IsCurrency(options?: IsCurrencyOptions) 检查字符串是否为有效货币金额。
- @IsEthereumAddress() 检查字符串是否是使用基本正则表达式的以太坊地址。不验证地址校验和。
- @IsBtcAddress() 检查字符串是否为有效的 BTC 地址。
- @IsDataURI() 检查字符串是否为数据 uri 格式。
- @IsEmail(options?: IsEmailOptions) 检查字符串是否为电子邮件。
- @IsFQDN(options?: IsFQDNOptions) 检查字符串是否是完全限定的域名(例如 domain.com)。
- @IsFullWidth() 检查字符串是否包含任何全角字符。
- @IsHalfWidth() 检查字符串是否包含任何半角字符。
- @IsVariableWidth() 检查字符串是否包含全角和半角字符的混合。
- @IsHexColor() 检查字符串是否为十六进制颜色。
- @IsHSLColor() 检查字符串是否是基于 CSS 颜色级别 4 规范的 HSL 颜色。
- @IsRgbColor(options?: IsRgbOptions) 检查字符串是 rgb 还是 rgba 颜色。
- @IsIdentityCard(locale?: string) 检查字符串是否是有效的身份证代码。
- @IsPassportNumber(countryCode?: string) 检查字符串是否是相对于特定国家代码的有效护照号码。
- @IsPostalCode(locale?: string) 检查字符串是否为邮政编码。
- @IsHexadecimal() 检查字符串是否为十六进制数。
- @IsOctal() 检查字符串是否为八进制数。
- @IsMACAddress(options?: IsMACAddressOptions) 检查字符串是否为 MAC 地址。
- @IsIP(version?: "4"|"6") 检查字符串是否为 IP(版本 4 或 6)。
- @IsPort() 检查字符串是否是有效的端口号。
- @IsISBN(version?: "10"|"13") 检查字符串是否为 ISBN(版本 10 或 13)。
- @IsEAN() 如果字符串是 EAN(欧洲商品编号),则检查字符串是否为 an。
- @ISISIN() 检查字符串是否为 ISIN(股票/证券标识符)。
- @IsISO8601(options?: IsISO8601Options) 检查字符串是否是有效的 ISO 8601 日期格式。使用选项 strict = true 对有效日期进行额外检查。
- @IsJSON() 检查字符串是否是有效的 JSON。
- @IsJWT() 检查字符串是否是有效的 JWT。
- @IsObject() 检查对象是否为有效对象(null、函数、数组将返回 false)。
- @IsNotEmptyObject() 检查对象是否不为空。
- @IsLowercase() 检查字符串是否为小写。
- @IsLatLong() 检查字符串是否是格式为 lat, long 的有效经纬度坐标。
- @IsLatitude() 检查字符串或数字是否是有效的纬度坐标。
- @IsLongitude() 检查字符串或数字是否是有效的经度坐标。
- @IsMobilePhone(locale: string) 检查字符串是否为手机号码。
- @IsISO31661Alpha2() 检查字符串是否是有效的 ISO 3166-1 alpha-2 官方指定的国家代码。
- @IsISO31661Alpha3() 检查字符串是否是官方指定的有效 ISO 3166-1 alpha-3 国家代码。
- @IsLocale() 检查字符串是否为语言环境。
- @IsPhoneNumber(region: string) 使用 libphonenumber-js 检查字符串是否是有效的电话号码。
- @IsMongoId() 检查字符串是否是 MongoDB ObjectId 的有效十六进制编码表示。
- @IsMultibyte() 检查字符串是否包含一个或多个多字节字符。
- @IsNumberString(options?: IsNumericOptions) 检查字符串是否为数字。
- @IsSurrogatePair() 检查字符串是否包含任何代理对字符。
- @IsUrl(options?: IsURLOptions) 检查字符串是否为 url。
- @IsMagnetURI() 检查字符串是否为磁铁 uri 格式。
- @IsUUID(version?: "3"|"4"|"5"|"all") 检查字符串是否为 UUID(版本 3、4、5 或全部)。
- @IsFirebasePushId() 检查字符串是否为 Firebase 推送 ID
- @IsUppercase() 检查字符串是否为大写。
- @Length(min: number, max?: number) 检查字符串的长度是否在一个范围内。
- @MinLength(min: number) 检查字符串的长度是否不小于给定的数字。
- @MaxLength(max: number) 检查字符串的长度是否不超过给定的数字。
- @Matches(pattern: RegExp, modifiers?: string) 检查字符串是否与模式匹配。匹配('foo',/foo/i)或匹配('foo','foo','i')。
- @IsMilitaryTime() 检查字符串是否是 HH:MM 格式的军事时间的有效表示。
- @IsHash(algorithm: string) 检查字符串是否为哈希 支持以下类型:md4、md5、sha1、sha256、sha384、sha512、ripemd128、ripemd160、tiger128、tiger160、tiger192、crc32、crc32b。
- @IsMimeType() 检查字符串是否匹配有效的 MIME 类型格式
- @IsSemVer() 检查字符串是否是语义版本控制规范 (SemVer)。
- @IsISSN(options?: IsISSNOptions) 检查字符串是否为 ISSN。
- @IISRC() 检查字符串是否为 ISRC。
- @IsRFC3339() 检查字符串是否是有效的 RFC 3339 日期。 数组验证装饰器
- @ArrayContains(values: any[]) 检查数组是否包含给定值数组中的所有值。
- @ArrayNotContains(values: any[]) 检查数组是否不包含任何给定值。
- @ArrayNotEmpty() 检查给定数组是否为空。
- @ArrayMinSize(min: number) 检查数组的长度是否大于或等于指定的数字。
- @ArrayMaxSize(max: number) 检查数组的长度是否小于或等于指定的数字。
- @ArrayUnique(identifier?: (o) => any) 检查是否所有数组的值都是唯一的。对象的比较是基于引用的。可选函数可以指定哪个返回值将用于比较。 对象验证装饰器
- @IsInstance(value: any) 检查属性是否是传递值的实例。 其他装饰器
- @Allow() 当没有为它指定其他约束时,防止剥离该属性。