校验名称或规格时,核心思路是用正则表达式匹配“非法字符”,只要匹配到就判定不通过。下面直接给你可用的写法。
✅ 正则校验:不允许出现逗号、换行、回车、空格
// 校验字符串是否包含非法字符(逗号、换行、回车、空格)publicstaticbooleancontainsIllegalChar(Stringinput){if(input==null){returntrue;// 或按需求返回 false}// 匹配逗号、换行符、回车符、空格Stringregex="[,\\n\\r ]";returninput.matches(".*"+regex+".*");}关键点:matches()需要全量匹配,所以用.*包裹。如果返回true,说明包含非法字符。
✅ 更严谨:同时校验其他空白字符
如果想把制表符\t、Unicode 换行等也禁掉,可以用\\s:
// \\s 匹配所有空白字符:空格、制表符、换行、回车、换页等publicstaticbooleancontainsIllegalChar(Stringinput){if(input==null){returntrue;}Stringregex="[,\\s]";returninput.matches(".*"+regex+".*");}✅ 推荐:用 Pattern 预编译(性能更好)
importjava.util.regex.Pattern;publicclassValidator{// 预编译正则,避免每次匹配都重新编译privatestaticfinalPatternILLEGAL_PATTERN=Pattern.compile("[,\\s]");publicstaticbooleanisValid(Stringinput){if(input==null||input.isEmpty()){returnfalse;}return!ILLEGAL_PATTERN.matcher(input).find();// find() 只要找到就返回 true}}注意:这里用find()而不是matches(),find()只要字符串任意位置有匹配就返回true,更适合“只要包含就拒绝”的场景。
⚠️ 几个容易踩的坑
- Java 字符串里写正则,反斜杠必须双写:
\\n、\\r、\\s,少写一个会编译报错或匹配不到。matches()是全量匹配,必须加.*才能匹配“包含”的情况;find()则不需要。- 如果只是不想让中间有空格,但允许首尾有,需要单独处理
trim();如果想完全禁止空格,用\\s更全面。
✅ 如果你用的是 Spring Boot 实体校验(@Valid)
可以用自定义注解,或者直接用@Pattern:
@Pattern(regexp="^[^,\\s]+$",message="名称不能包含逗号、空格或换行")privateStringname;^[^,\\s]+$表示:整个字符串只能由非逗号、非空白字符组成,有一个都不行。
核心结论:用正则[,\\s]配合find()或matches()就能同时拦住逗号、空格、换行、回车;如果只想禁空格和逗号,用[,\\s]就够了,想连制表符也禁,\\s已经包含它了。