You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSR-303多正则校验及多提示消息配置问题咨询

解决方案:用@Pattern.List区分全空格与特殊字符校验提示

要实现全空格时显示专属提示,同时保留特殊字符校验的不同提示,你可以通过@Pattern.List定义两个正则校验规则,分别对应两种违规场景,并在messages.properties中为每个规则配置独立的消息。具体步骤如下:

1. 更新Person类的校验注解

保留@NotNull处理null值,用@Pattern.List替代原来的@NotEmpty和单个@Pattern,添加两个@Pattern规则:

  • 第一个规则匹配全空格(包括空串),触发“姓名不能为空白”提示
  • 第二个规则匹配禁止的特殊字符,触发原来的“Invalid name”提示

代码示例:

public class Person {
    @NotNull(message = "{person.name.notnull}") // 可选:为null值配置单独提示
    @Pattern.List({
        @Pattern(
            regexp = "^\\s*$",
            message = "{person.name.blank}"
        ),
        @Pattern(
            regexp = "^[^_*!$^|\\:;&<>\"']*$", // 修正原正则转义:将&lt;&gt;替换为实际的<>
            message = "{person.name.specialcharacter}"
        )
    })
    private String name;

    // getter、setter 省略
}

2. 配置messages.properties

为每个校验规则的message键配置对应的提示文本:

# 处理null值的提示(可选)
person.name.notnull=姓名不能为空
# 全空格/空串的提示
person.name.blank=姓名不能为空白
# 特殊字符的提示
person.name.specialcharacter=Invalid name

关键说明

  • 正则解释:
    • ^\\s*$:匹配任意数量的空白字符(包括0个,即空串),直接覆盖原来@NotEmpty的校验场景
    • 第二个正则修正了原表达式的转义问题,把HTML实体&lt;&gt;换成实际的<>,确保能正确匹配这些特殊字符
  • 校验逻辑:JSR-303会依次执行@Pattern.List中的规则,只要有一个规则匹配违规场景,就会抛出对应的提示。用户输入全空格时,第一个规则优先触发,显示“姓名不能为空白”;输入包含特殊字符的非空白内容时,第二个规则触发,显示“Invalid name”
  • 保留@NotNull:正则规则无法处理null值,所以必须保留@NotNull来校验字段为null的场景

内容的提问来源于stack exchange,提问作者Saakshi Aggarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:07:34