package cn.lili.common.validation.impl; import cn.lili.common.validation.Mobile; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 电话校验 * 支持手机号+电话同时校验 * * @author Bulbasaur * @since 2021/7/9 1:41 上午 */ public class MobileValidator implements ConstraintValidator { private static final Pattern PHONE = Pattern.compile("^0?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])[0-9]{8}$"); private static final Pattern AREA_MOBILE = Pattern.compile("0\\d{2,3}[-]?\\d{7,8}|0\\d{2,3}\\s?\\d{7,8}|13[0-9]\\d{8}|15[1089]\\d{8}"); private static final Pattern MOBILE = Pattern.compile("^[1-9]{1}[0-9]{5,8}$"); @Override public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { Matcher m = null; // 验证手机号 if (value.length() == 11) { m = PHONE.matcher(value); // 验证带区号的电话 } else if (value.length() > 9) { m = AREA_MOBILE.matcher(value); //验证没有区号的电话 } else { m = MOBILE.matcher(value); } return m.matches(); } @Override public void initialize(Mobile constraintAnnotation) { } }