spring boot 校验中文姓名需使用 @pattern 配合正则表达式,限制仅包含中文字符且长度在合理范围内。具体做法是设置 regexp 属性为 [u4e00-u9fa5]{2,20},这样能确保输入全是汉字且长度不超过 20 字。如果输入为空或包含英文、数字及特殊符号,校验将直接失败并返回错误信息。

如何配置 @Pattern 注解以支持中文
在实体类字段上添加 @Pattern 注解即可实现校验。需要导入 javax.validation.constraints.Pattern 包,并在 message 属性中定义友好的提示语。该注解会拦截不符合正则规则的请求参数,阻止非法数据进入业务逻辑。

import javax.validation.constraints.Pattern;
public class UserDTO {
@Pattern(regexp = "[\u4e00-\u9fa5]{2,20}", message = "姓名必须为2到20个中文字符")
private String name;
// getter and setter
}
如何处理空值与默认行为
当姓名字段允许为空时,@Pattern 不会自动放行空字符串,因为空串不匹配非零长度的正则。此时应结合 @NotBlank 或自定义逻辑处理。若希望空值通过校验,需移除 @Pattern 或改用 Optional 包装。实际开发中,通常要求姓名必填,因此直接使用 @NotBlank 加 @Pattern 组合更稳妥。

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
public class UserDTO {
@NotBlank(message = "姓名不能为空")
@Pattern(regexp = "[\u4e00-\u9fa5]{2,20}", message = "姓名必须为2到20个中文字符")
private String name;
// getter and setter
}
基于输入“张三”和“张123”的校验结果差异
输入“张三”符合正则规则,校验通过;输入“张123”因包含数字,触发 @Pattern 校验失败,返回预设错误消息。这验证了正则表达式对非中文字符的严格过滤能力。开发者可通过单元测试模拟这两种输入,确认校验器行为符合预期。











