Validator
Validator 是一个提供类型检查和数据验证功能的工具包,支持多种数据类型的验证。
特性
- 类型检查(数组、布尔值、日期、枚举、数字、对象、字符串等)
- 数组验证(包含、最大/最小长度、唯一性等)
- 字符串验证(JSON、Base64、DataURL、MD5、大小写、哈希、颜色、UUID 等)
- 数字验证(正负数、最大/最小值等)
- 日期验证(最大/最小日期)
- 对象验证(实例检查、非空检查)
- 通用验证(相等、定义、空值、包含等)
安装
npm install @kazura/validator
使用方法
类型检查
import {
isArray,
isBoolean,
isDate,
isEnum,
isInt,
isNumber,
isObject,
isString,
isPromise,
isMap,
isSet,
isRegExp,
isFunction,
isSymbol,
} from '@kazura/validator'
// 数组检查
isArray([1, 2, 3]) // true
// 布尔值检查
isBoolean(true) // true
// 日期检查
isDate(new Date()) // true
// 枚举检查
enum Color {
Red,
Green,
Blue,
}
isEnum(Color.Red, Color) // true
// 整数检查
isInt(42) // true
// 数字检查
isNumber(3.14, { maxDecimalPlaces: 2 }) // true
// 对象检查
isObject({}) // true
// 字符串检查
isString('Hello') // true
// Promise 检查
isPromise(Promise.resolve()) // true
// Map 检查
isMap(new Map()) // true
// Set 检查
isSet(new Set()) // true
// RegExp 检查
isRegExp(/test/) // true
// 函数检查
isFunction(() => {}) // true
// Symbol 检查
isSymbol(Symbol()) // true
数组验证
import {
arrayContains,
arrayMaxSize,
arrayMinSize,
arrayNotContains,
arrayNotEmpty,
arrayUnique,
} from '@kazura/validator'
// 检查数组是否包含所有值
arrayContains([1, 2, 3], [1, 2]) // true
// 检查数组长度是否小于等于指定值
arrayMaxSize([1, 2, 3], 3) // true
// 检查数组长度是否大于等于指定值
arrayMinSize([1, 2, 3], 2) // true
// 检查数组是否不包含任何指定值
arrayNotContains([1, 2, 3], [4, 5]) // true
// 检查数组是否非空
arrayNotEmpty([1, 2, 3]) // true
// 检查数组是否唯一
arrayUnique([1, 2, 3]) // true
arrayUnique([{ id: 1 }, { id: 2 }], (item) => item.id) // true
字符串验证
import {
isJSON,
isBase64,
isDataURL,
isMD5,
isLowercase,
isUppercase,
isHash,
isHexColor,
isUUID,
} from '@kazura/validator'
// JSON 检查
isJSON('{"name": "John"}') // true
// Base64 检查
isBase64('SGVsbG8=') // true
// DataURL 检查
isDataURL(
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=='
) // true
// MD5 检查
isMD5('d41d8cd98f00b204e9800998ecf8427e') // true
// 小写检查
isLowercase('hello') // true
// 大写检查
isUppercase('HELLO') // true
// 哈希检查
isHash('5d41402abc4b2a76b9719d911017c592', 'md5') // true
// 十六进制颜色检查
isHexColor('#ff0000') // true
// UUID 检查
isUUID('123e4567-e89b-12d3-a456-426614174000') // true
数字验证
import { isNegative, isPositive, max, min } from '@kazura/validator'
// 负数检查
isNegative(-1) // true
// 正数检查
isPositive(1) // true
// 最大值检查
max(5, 10) // true
// 最小值检查
min(10, 5) // true
日期验证
import { maxDate, minDate } from '@kazura/validator'
const now = new Date()
const tomorrow = new Date(now.getTime() + 24 * 60 * 60 * 1000)
const yesterday = new Date(now.getTime() - 24 * 60 * 60 * 1000)
// 最大日期检查
maxDate(now, tomorrow) // true
// 最小日期检查
minDate(now, yesterday) // true
对象验证
import { isInstance, isNotEmptyObject } from '@kazura/validator'
class User {}
// 实例检查
isInstance(new User(), User) // true
// 非空对象检查
isNotEmptyObject({ name: 'John' }) // true
isNotEmptyObject({ name: 'John' }, { nullable: false }) // true
通用验证
import { equals, isDefined, isEmpty, isIn, isNotEmpty, isNotIn, notEquals } from '@kazura/validator'
// 相等检查
equals(1, 1) // true
// 定义检查
isDefined('test') // true
// 空值检查
isEmpty('') // true
// 包含检查
isIn('a', ['a', 'b', 'c']) // true
// 非空检查
isNotEmpty('test') // true
// 不包含检查
isNotIn('d', ['a', 'b', 'c']) // true
// 不相等检查
notEquals(1, 2) // true
API 参考
类型检查
isArray
function isArray<T = any>(value: unknown): value is Array<T>
检查值是否为数组。
isBoolean
function isBoolean(value: unknown): value is boolean
检查值是否为布尔值。
isDate
function isDate(value: unknown): value is Date
检查值是否为日期。
isEnum
function isEnum(value: unknown, entity: any): boolean
检查值是否为枚举成员。
isInt
function isInt(val: unknown): val is Number
检查值是否为整数。
isNumber
function isNumber(value: unknown, options?: IsNumberOptions): value is number
检查值是否为数字。
参数:
options
: 数字选项allowNaN
: 是否允许 NaNallowInfinity
: 是否允许无穷大maxDecimalPlaces
: 最大小数位数
isObject
function isObject<T = object>(value: unknown): value is T
检查值是否为对象。
isString
function isString(value: unknown): value is string
检查值是否为字符串。
isPromise
function isPromise<T>(p: any): p is Promise<T>
检查值是否为 Promise。
isMap
function isMap<K = any, V = any>(val: unknown): val is Map<K, V>
检查值是否为 Map。
isSet
function isSet<T = any>(val: unknown): val is Set<T>
检查值是否为 Set。
isRegExp
function isRegExp(val: unknown): val is RegExp
检查值是否为 RegExp。
isFunction
function isFunction(val: unknown): val is Function
检查值是否为函数。
isSymbol
function isSymbol(val: unknown): val is symbol
检查值是否为 Symbol。
数组验证
arrayContains
function arrayContains(array: unknown, values: any[]): boolean
检查数组是否包含所有指定值。
arrayMaxSize
function arrayMaxSize(array: unknown, max: number): boolean
检查数组长度是否小于等于指定值。
arrayMinSize
function arrayMinSize(array: unknown, min: number): boolean
检查数组长度是否大于等于指定值。
arrayNotContains
function arrayNotContains(array: unknown, values: any[]): boolean
检查数组是否不包含任何指定值。
arrayNotEmpty
function arrayNotEmpty(array: unknown): boolean
检查数组是否非空。
arrayUnique
function arrayUnique(array: unknown[], identifier?: ArrayUniqueIdentifier): boolean
检查数组是否唯一。
参数:
identifier
: 自定义标识函数
字符串验证
isJSON
function isJSON(str: string): boolean
检查字符串是否为 JSON。
isBase64
function isBase64(str: string, regex?: boolean): boolean
检查字符串是否为 Base64。
参数:
regex
: 是否使用正则表达式判断
isDataURL
function isDataURL(str: string, regex?: boolean): boolean
检查字符串是否为 DataURL。
参数:
regex
: 是否使用正则表达式判断
isMD5
function isMD5(str: string): boolean
检查字符串是否为 MD5。
isLowercase
function isLowercase(str: string): boolean
检查字符串是否为小写。
isUppercase
function isUppercase(str: string): boolean
检查字符串是否为大写。
isHash
function isHash(str: string, algorithm: keyof typeof HashAlgorithmMap): boolean
检查字符串是否为指定算法的哈希值。
参数:
algorithm
: 哈希算法类型
isHexColor
function isHexColor(str: string): boolean
检查字符串是否为十六进制颜色值。
isUUID
function isUUID(str: string, version?: keyof typeof UUIDVersionMap): boolean
检查字符串是否为 UUID。
参数:
version
: UUID 版本
数字验证
isNegative
function isNegative(value: unknown): boolean
检查值是否为负数。
isPositive
function isPositive(value: unknown): boolean
检查值是否为正数。
max
function max(num: unknown, max: number): boolean
检查数字是否小于等于指定值。
min
function min(num: unknown, min: number): boolean
检查数字是否大于等于指定值。
日期验证
maxDate
function maxDate(date: unknown, maxDate: Date | (() => Date)): boolean
检查日期是否早于指定日期。
minDate
function minDate(date: unknown, minDate: Date | (() => Date)): boolean
检查日期是否晚于指定日期。
对象验证
isInstance
function isInstance(object: unknown, targetTypeConstructor: new (...args: any[]) => any): boolean
检查值是否为指定对象的实例。
isNotEmptyObject
function isNotEmptyObject(value: unknown, options?: { nullable?: boolean }): boolean
检查值是否为非空对象。
参数:
options
: 对象选项nullable
: 是否允许 null 值
通用验证
equals
function equals(value: unknown, comparison: unknown): boolean
检查值是否相等。
isDefined
function isDefined(value: any): boolean
检查值是否已定义。
isEmpty
function isEmpty(value: unknown): boolean
检查值是否为空。
isIn
function isIn(value: unknown, possibleValues: readonly unknown[]): boolean
检查值是否在允许值数组中。
isNotEmpty
function isNotEmpty(value: unknown): boolean
检查值是否非空。
isNotIn
function isNotIn(value: unknown, possibleValues: readonly unknown[]): boolean
检查值是否不在允许值数组中。
notEquals
function notEquals(value: unknown, comparison: unknown): boolean
检查值是否不相等。
注意事项
- 类型检查函数返回类型保护,可以在 TypeScript 中使用
- 数组验证函数对 null 和 undefined 返回 false
- 字符串验证函数只接受字符串参数
- 数字验证函数只接受数字参数
- 日期验证函数只接受 Date 对象参数
- 对象验证函数对非对象参数返回 false
- 通用验证函数可以处理任何类型的参数