自定义手机号注解可用于对于账号为手机号的进行验证
1.创建自定义注解
import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; /** * 手机号码的校检注解 */ @Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR, ElementType.PARAMETER,ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = {IsMobileValidator.class})// 这个注解的参数指定用于校验工作的是哪个类 public @interface IsMobile { //默认手机号码不可为空 boolean required() default true; //如果校检不通过时提示信息 String message() default "手机号码格式错误"; Class<?>[] groups() default { }; Class<? extends Payload>[] payload() default {}; }2.创建注解验证器
import org.apache.commons.lang3.StringUtils; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class IsMobileValidator implements ConstraintValidator<IsMobile,String> { //用于获取校检字段是否可以为空 private boolean required=false; /** * 用于获取注解 * @param constraintAnnotation */ public void initialize(IsMobile constraintAnnotation) { required=constraintAnnotation.required(); } /** * 用于校检字段是否合法 * * @param value 带校检的字段 * @param constraintValidatorContext * @return 字段检验结果 */ public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { //如果所检验字段可以为空 if (required){ return ValidatorUtil.isMobile(value);//检验结果 }else { if (StringUtils.isEmpty(value)) return true; else return ValidatorUtil.isMobile(value);//检验结果 } }其中ValidatorUtil工具类:
import org.apache.commons.lang3.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ValidatorUtil { //手机号正则 private static final Pattern mobilePattern=Pattern.compile("1\\d{10}"); public static boolean isMobile(String mobile){ if (StringUtils.isEmpty(mobile)) return false; Matcher matcher=mobilePattern.matcher(mobile); return matcher.matches(); } }