diff --git a/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py b/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py index 7ae15e1..807e0bd 100644 --- a/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py +++ b/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py @@ -58,6 +58,34 @@ class NotBlank: return wrapper +class Pattern: + """ + 字段正则校验装饰器 + """ + def __init__(self, field_name: str, regexp: str, message: Optional[str] = None): + """ + 字段正则校验装饰器 + :param field_name: 需要校验的字段名称 + :param regexp: 正则表达式 + :param message: 校验失败的提示信息 + :return: + """ + self.field_name = field_name + self.regexp = regexp + self.message = message + + def __call__(self, func): + @wraps(func) + def wrapper(*args, **kwargs): + check_model = args[0] + if isinstance(check_model, BaseModel): + field_value = getattr(check_model, self.field_name) + if isinstance(field_value, str) and not re.match(self.regexp, field_value): + raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}格式不正确') + return func(*args, **kwargs) + return wrapper + + class Size: """ 字段大小校验装饰器