Java @Pattern注解常用校验正则表达式速查指南

Hazel
Hazel
发布时间:2026-10-16 | 5人浏览过
原创

在后端开发中,利用Java的`@Pattern`注解配合正则表达式是防止非法数据入库的高效手段。本文总结了实际项目中常用的校验规则,包括复杂的用户名组合、多类型域名的邮箱、特定长度的联系电话以及密码强度要求,提供开箱即用的代码片段。

前端校验与后端防护

在Web开发流程中,前端通常会对用户输入进行初步过滤以提升体验,但出于安全考虑,后端必须建立独立的验证防线。Java生态中,JSR-380 (Bean Validation) 规范提供了强大的注解校验体系,其中`@Pattern`专门用于约束字符序列必须符合特定的正则表达式模式。其底层通过拦截器或过滤器捕获请求,对标注了校验注解的实体属性进行处理,确保非空、长度、内容及内容合法性符合预期。

常见业务场景的正则实现

第1步:配置名称字段限制

目的:允许企业名称包含中文、字母和数字,排除特殊符号。

入口:实体类 `String` 字段添加注解。

动作:使用 Unicode 范围匹配中文字符,并组合 ASCII 字母数字。

/**
* 公司名称
*/
@Pattern(regexp="^[\\u4e00-\\u9fa5_a-zA-Z0-9]+$",message="公司名称只能输入中文字符 字母、数字")
@ApiModelProperty(value = "公司名称")
private String name;

第2步:设置高强度用户名规则

目的:增强系统安全性,强制用户名同时包含大写字母、小写字母和数字,且长度可控。

入口:用户注册或修改资料接口。

重要参数:

  • `(?=.*[a-z])`:断言至少一个小写字母;
  • `(?=.*[A-Z])`:断言至少一个大写字母;
  • `(?=.*[0-9])`:断言至少一个数字;
  • `[A-Za-z0-9]{6,20}`:整体长度为6到20位的纯字母数字组合。
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{6,20}$", message = "用户名错误")

第3步:实施数字格式校验

目的:针对不同精度的数值录入场景,如金额、数量或ID。

动作:选择对应精度的正则模式。

场景需求 正则表达式模式
任意整数或最多两位小数 "^[0-9]+\.{0,1}[0-9]{0,2}$"
仅允许连续数字 "^[0-9]*$"
合法的整数表示(不含前导零) "^(0|[1-9][0-9]*)$"
严格保留两位小数(常用于货币) "^[0-9]+(.[0-9]{2})?$"
精度1~3位的小数 "^[0-9]+(.[0-9]{1,3})?$"
非零正整数 "^\+?[1-9][0-9]*$"

第4步:构建标准邮箱验证

目的:拦截无效的邮件地址,防止垃圾信息注入。

动作:解析邮箱结构,将本地部分与域名部分拼接。

核心逻辑:

  1. 账号名部分:支持字母、数字、下划线和中划线,需重复多次。[a-zA-Z0-9_-]+
  2. 域名部分:由多级子域名组成,每一级同样遵循上述字符规则,并用点号分隔。由于顶级域名存在(如.com),结构为:本地名 + @ + 主域名 + 多个次级域名。[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+

完整表达式如下:

@Pattern(regexp = "^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$", message = "邮箱格式不正确")

第5步:处理时间与联系方式

时间相关:对于月日校验,建议仅做基础范围限制,复杂日历逻辑建议交由日期库处理。

  • 月份(01-12):"^(0?[1-9]|1[0-2])$"
  • 天数(01-31):"^((0?[1-9])|((1|2)[0-9])|30|31)$"

联系号码:考虑到国内座机区号(3-4位)和号码(7-8位)的组合,总位数在7-12位之间。此外,为了兼容前端脱敏后的手机号(如含星号),可加入星号匹配。

@Pattern(regexp = "^[\\d\\*]{7,12}$", message = "联系电话输入有误")

第6步:强化密码复杂度校验

目的:强制执行“强弱”混合策略,提升账户安全感。

规则:6-32位长度,且必须同时满足以下条件的其中两项:数字、字母、特殊符号。

该规则较为苛刻,若要求三者选二,需确保各组重叠区域不遗漏。以下为一种兼顾逻辑的写法(确保至少有数字和符号,或字母和符号,或数字和字母):

@Pattern(regexp = "^(?=.*[a-zA-Z0-9].*)(?=.*[a-zA-Z.!@#$%^&*].*).*(?=.*[0-9.!.?]).{6,32}$", message = "密码至少包含数字,字母和符号的两种")

注:原文档提供的密码正则较为宽泛且存在字符转义风险,实际生产环境中建议根据具体的密码策略(如是否强制包含特殊字符)调整正则串,或使用专门的密码校验库。

以上就是 Java 中 @Pattern 注解常用校验正则表达式的详细内容,更多关于 Java @Pattern 注解参数校验实战技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表