import { registerDecorator, ValidationArguments, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator'; export function IsCarPlate(validationOptions?: ValidationOptions) { return (object: any, propertyName: string) => { registerDecorator({ target: object.constructor, propertyName, options: validationOptions, validator: IsCarPlateConstraint, }); }; } @ValidatorConstraint({ name: 'IsCarPlate' }) export class IsCarPlateConstraint implements ValidatorConstraintInterface { validate(value: any, validationArguments?: ValidationArguments): boolean { console.log(typeof value ) // console.log(value.match(/[#?!@$%^&*+_\<\>\/\[\]\{\}]/) ) if(typeof value === "string"){ // value = value.replace(/-|\./g,'').trim() console.log(value) if (value.match(/^[A-Z|0-9]{6,}$/)){ // chỉ cho phép chữ cái viết hoa và số return true } else { return false } }else{ return false } } defaultMessage(validationArguments?: ValidationArguments): string { return "validation.INVALID_LICENSE_PLATE" } }