Spring Boot中@Pattern注解正则匹配问题:标题禁含指定特殊字符
解决方案
你的正则表达式只匹配单个符合要求的字符,只要标题里存在一个合法字符就会通过校验,完全不符合“整个标题都不能包含指定非法字符”的需求。要实现正确校验,需要对正则做两处修改:
- 用
^和$锚定整个字符串,确保校验覆盖标题的全部内容 - 用
+限定合法字符组可出现1次或多次(如果允许空标题,可替换为*)
修改后的代码如下:
@Pattern(regexp = "^[^\\\\/:*?\"<>|]+$", message = "标题不能包含\\/:*?\"<>|这些字符") private String title;
正则规则说明
^:匹配字符串的起始位置[^\\\\/:*?\"<>|]:匹配任意不在非法字符列表里的字符(Java中反斜杠需转义,因此写为\\\\)+:表示前面的合法字符组可出现1次或多次$:匹配字符串的结束位置
这样就能确保标题的每一个字符都不属于非法字符集合,只要出现任一非法字符就会触发校验失败。
内容的提问来源于stack exchange,提问作者Tushar Agarwal
相关产品推荐
相关产品推荐

