2023年5月17日 车辆集成系统-车辆编码更新接口
今天开发过程中,用了注解@Pattern来限制数据值格式,虽然在前后端分离的业务开发中对于数据值的限制在前端可以做更好的处理,但是还是记录一下学习学习。
【1】问题场景:前端触发新车辆编码更改申请,后端需要校验新编码是否在数据库中存在,同时限制车辆编码的数据格式:不应为纯数字、纯字母,字母应为大写
【2】需求:车辆编码格式:不能是纯数字、纯字母(小写、大写都不行)、至少包含一个大写字母
【3】使用:
/**
* 申请车辆编码
*/
@ApiModelProperty(value = "申请车辆编码", name = "applyCode")
@NotNull(message = "申请车辆编码不能为空")
@Length(max = 10, message = "车辆编码长度不能超过10")
@Pattern(regexp = "(?!^\d+$)(?!^[a-zA-Z]+$)(?!.*[a-z])(?=.*[A-Z]).*$", message = "不应为纯数字或纯字母,包含字母应为大写")
private String applyCode;
【4】规则解释:
注解属性:regexp 表示匹配规则;
注解属性:message 表示不忙组匹配规则的提示内容;
regex属性值:完全符合正则表达式
?!:负向零宽断言,反向匹配。
?=:正向零宽断言,正向匹配。
^:以什么开头;
\\d:0-9的随机一个数字;
+数量词:1或多个(匹配到上一个字符形式)
$:以什么结尾;
[]:元素集合;[a-zA-Z]==任意字母,不区分大小写;
.:任意一个字符
*:0个或多个
【5】案例解释
(?!^\\d+$)(?!^[a-zA-Z]+$)(?!.*[a-z])(?=.*[A-Z]).*$
- 第一个(?!^(\\d+$)):不能是纯数字;
- 第二个(?!^[a-zA-z]+$):不能是纯字母【大小写都不行】;
- 第三个(?!.*[a-z]):非纯字母但是包含字母只能大写,避免了类似"12aa"这样的情况
- 第四个(?=.*[A-Z].*$):之后包含一个大写字母