在项目开发时遇到了手机号校验的问题,就寻思着能不能不用每次都去程序校验,怪麻烦的。就想到了注解,直接上代码。

创建需要的两个注解

1.方法上的注解,标明这个方法需要进行校验

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckPhone {}

2.字段上的注解,标明这个字段需要进行校验

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PhoneFlag {}

3. 创建相应的Aspect

@Aspect
@Component
public class CheckPhoneAspect {@Before("@annotation(xx.xx.CheckPhone)")public void before(JoinPoint point) throws Throwable {// 获取所有参数Object[] args = point.getArgs();for (Object arg : args) {if (null == arg){return;}Class c = arg.getClass();// 获取class对象内的字段Field[] fields = c.getDeclaredFields();if (null != fields){for (Field field : fields) {String methodName = "get";// 字段名称String name = field.getName();// 组装获取字段方法名String first = name.substring(0,1).toUpperCase();if (name.length() > 1){String second = name.substring(1, name.length());methodName = methodName.concat(first).concat(second);}else {methodName = methodName.concat(first);}// 获取xx注解PhoneFlag annotation = field.getAnnotation(PhoneFlag.class);if (null != annotation){String phone = (String) c.getMethod(methodName).invoke(arg);if (StringUtils.isNotBlank(phone)){if (!PhoneUtils.isTel(phone) && !PhoneUtils.isMobile(phone)){throw new CloudException(9999,"电话格式不正确");}}}}}}}
}

4. 校验方法:手机号,座机号

public class PhoneUtils {private static final String REGEX_MOBILE ="((\\+86|0086)?\\s*)((134[0-8]\\d{7})|(((13([0-3]|[5-9]))|(14[5-9])|15([0-3]|[5-9])|(16(2|[5-7]))|17([0-3]|[5-8])|18[0-9]|19([0-9]))\\d{8})|(14(0|1|4)0\\d{7})|(1740([0-5]|[6-9]|[10-12])\\d{7}))";/*** 正则:固定电话号码,可带区号,然后至少6,8位数字*/private static final String REGEX_TEL = "^(\\d{3,4}-)?\\d{6,8}$";private static final Pattern PATTERN_REGEX_TEL = Pattern.compile(REGEX_TEL);/*** 判断是否是手机号* @param tel 手机号* @return boolean true:是  false:否*/public static boolean isMobile(String tel) {if (StringUtils.isEmpty(tel)){return false;}return Pattern.matches(REGEX_MOBILE, tel);}/*** 验证固定电话号码*/public static boolean isTel( String str) {return isMatch(PATTERN_REGEX_TEL, str);}public static boolean isMatch(Pattern pattern, String str) {return StringUtils.isNotEmpty(str) && pattern.matcher(str).matches();}public static void main(String[] args) {System.out.println(isTel("2887438"));}}

测试步骤,在对应的controller方法上添加@CheckPhone

然后在传参中需要校验的字段上加上@PhoneFlag

到这就完成了。

也不知道实用性咋样,但是好用,欢迎大佬们提出建议

自定义校验手机号码和电话号码注解相关推荐

  1. element form自定义校验_SpringBoot分组校验及自定义校验注解

    前言   在日常的开发中,参数校验是非常重要的一个环节,严格参数校验会减少很多出bug的概率,增加接口的安全性.在此之前写过一篇SpringBoot统一参数校验主要介绍了一些简单的校验方法.而这篇则是 ...

  2. validator自定义校验注解及使用

    validator自定义校验注解及使用 官方文档:https://docs.jboss.org/hibernate/validator/8.0/reference/en-US/html_single/ ...

  3. Spring 使用 JSR303自定义校验注解+分组校验

    我们有这样一个需求,想要校验一个int类型的变量,校验它的值必须为我们所指定的值,且在修改状态分组时生效. @ListValue(vals = {0, 1}, groups = {UpdateStat ...

  4. JSR303自定义校验注解

    自定义校验 1).编写一个自定义的校验注解 2).编写一个自定义的校验器 ConstraintValidator 3).关联自定义的校验器和自定义的校验注解* @Documented* @Constr ...

  5. java 注解校验_Java开发编写自定义校验注解和校验器

    自定义校验 1).编写一个自定义的校验注解 2).编写一个自定义的校验器 ConstraintValidator 3).关联自定义的校验器和自定义的校验注解 * @Documented * @Cons ...

  6. Java 校验注解的使用、自定义校验注解

    文章目录 一.引入依赖 二.基本校验 1. 常用校验注解 2. 自动校验 3. 代码中获取校验结果 三.嵌套校验 四.分组校验 五.单属性自定义校验规则 1. 功能:只能取枚举的值 六.多属性自定义联 ...

  7. 基于Spring Validation自定义校验注解

    常用的原生校验注解有: @NotNull 所有对象判空 @NotBlank 字符串判空 @NotEmpty 集合判空 自定义校验注解实现方式: 引入依赖 如果spring-boot版本小于2.3.x, ...

  8. Spring MVC代码实例系列-06:Spring MVC配置Hibernate-Validator以及自定义校验注解

    超级通道 :Spring MVC代码实例系列-绪论 本章主要记录,如何在Spring MVC中添加Hibernate-Validator以及自定义校验注解.本章主要涉及的技术点有: javax.val ...

  9. java自定义校验注解

    前言 在日常的开发中可能会对手机号.邮箱.身份证号的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了.此文编写一个对应0,1值的校验. 1.引入 ...

最新文章

  1. windows 本地安全设置 灰色_安全检查与加固
  2. 快速理解mysql主从,主主备份原理及实践
  3. switchyomega规则列表备份_求人不如求己,自己动手写一个CSDN博客备份小工具?...
  4. linux sed错误sed: -e expression #1, unknown option to `s'解决办法
  5. 20154318_王秀飞 Exp2 后门原理与实践
  6. Android数据库高手秘籍
  7. 【HAOI2015】树上染色
  8. OSError: [WinError 126] 找不到指定的模块————Shapely
  9. java的构造函数详解,Java构造函数与普通函数用法详解
  10. WordPress病毒杂志主题King V6.5 英文Nulled版
  11. DNS服务器介绍(二)——主从复制和区域转发
  12. 更换Homebrew为中科大源
  13. WebComponent魔法堂:深究Custom Element 之 从过去看现在
  14. Bioconductor学习_基因组坐标体系-Granges和IRanges
  15. 台式计算机看网络电视,台式电脑无线投屏到电视
  16. 省级面板数据(2003-2019)二十:道路长度、面积、用水、污水、废气、保护区等(stata或excel版本)
  17. Swift: App审核基本要点
  18. 虚拟机3-11-14:53,工作记录
  19. 超炫的3D特效相册功能android
  20. el-element使用本地自定义图标

热门文章

  1. 使用animate库
  2. 【属性基加密】Ubuntu下CP-ABE库安装及调用教程详解
  3. 电话接入系统的服务器设置,Skype for Business Server 中本地 PSTN 连接的计划电话系统...
  4. 2009经典语录,雷死人不要钱
  5. 水经注,bigemap 功能对比
  6. 金融知识杂记(一) 市盈率 市销率 市净率 逆市操作tips(jhs 0414)
  7. 第22期状元简讯:支付宝母公司斥资11.8亿元控股天弘基金
  8. 聊城大学计算机应用基础,聊城大学试题计算机应用基础试题.doc
  9. 2021年NBA季后赛第四轮总决赛晋级预测
  10. 台式计算机市场占有率,笔记本和台式机电脑的市场占有率的数据分析