一、定义枚举
/**
* 验证字段规则类型
*
* @date 2023/5/22 14:02
**/
public enum CommonFiledRuleTypeEnum {
/** 手机号 **/
PHONE,
/** 邮箱 **/
EMAIL
}
二、定义注解
import com.anglin.common.validate.CommonFiledRuleValidator;
import com.anglin.common.validate.enums.CommonFiledRuleTypeEnum;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解--验证手机号和邮箱格式
*
* @author zhuzhibin
* @date 2023/5/22 14:25
**/
@Target({ElementType.TYPE, ElementType.FIELD})
@Constraint(validatedBy = CommonFiledRuleValidator.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface CommonFiledRuleValidate {
String message() default "输入的内容格式验证不通过";
CommonFiledRuleTypeEnum type() default CommonFiledRuleTypeEnum.PHONE;
String regex() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
三、定义验证类
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.PhoneUtil;
import cn.hutool.core.util.StrUtil;
import com.anglin.common.annotation.CommonFiledRuleValidate;
import com.anglin.common.util.CommonEmailUtil;
import com.anglin.common.validate.enums.CommonFiledRuleTypeEnum;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* @Title: FieldUniqueValidator
* @ProjectName online-plus
* @Description: 验证手机号or邮箱格式
* @Author ZhuZhiBin
* @Version
* @Date 2023/5/22 11:44
*/
public class CommonFiledRuleValidator implements ConstraintValidator<CommonFiledRuleValidate,String> {
private String message;
private CommonFiledRuleTypeEnum phoneOrEmailTypeEnum;
private String regex;
@Override
public void initialize(CommonFiledRuleValidate validator) {
this.message = validator.message();
this.phoneOrEmailTypeEnum = validator.type();
this.regex = validator.regex();
}
@Override
public boolean isValid(String o, ConstraintValidatorContext constraintValidatorContext) {
if(StrUtil.isEmpty(o)){
return true;
}
boolean res = true;
switch (phoneOrEmailTypeEnum) {
case PHONE:
res = phoneValidate(o);
break;
case EMAIL:
res = emailValidate(o);
break;
//其他规则可以继续添加
default:
}
return res;
}
/**
* 验证手机号
* @param o
* @return
*/
private boolean phoneValidate(String o) {
if(StrUtil.isNotEmpty(regex)){
return Validator.isMatchRegex(regex, o);
}
return PhoneUtil.isPhone(o);
}
/**
* 验证邮箱
* @param o
* @return
*/
private boolean emailValidate(String o) {
if(StrUtil.isNotEmpty(regex)){
return Validator.isMatchRegex(regex, o);
}
return CommonEmailUtil.isEmail(o);
}
}