Java正则如何匹配含至少2个大写字母、可带数字及特殊字符的字符串
问题原因
你原有正则的问题在于仅允许小写字母(\p{Ll})和大写字母(\p{Lu})组合,完全排除了数字、特殊字符的存在,因此包含非大小写字母的字符串都会匹配失败。
解决方案
直接放宽非大写字符的匹配限制即可,只要保证整个字符串中至少存在2个大写字母,其余字符可以是任意类型(小写、数字、你提到的特殊字符均支持),修改后的代码如下:
public static boolean isWordHas2Caps(String s) { // 兼容Unicode大写字母,允许所有非大写字符存在 return s.matches("^(?:\\P{Lu}*\\p{Lu}){2,}.*$"); }
正则说明
^匹配字符串起始位置(?:\\P{Lu}*\\p{Lu}){2,}非捕获组,匹配「任意个非大写字符 + 1个大写字母」的组合至少2次,确保字符串内最少有2个大写字母.*匹配2个大写字母之后剩余的所有字符$匹配字符串结束位置
校验效果验证
符合你的规则的测试用例均返回正确结果:
LLLuoiu9898→ trueOhdf&jh/dsjO→ trueYYYY99999→ true- 仅含1个大写字母的字符串(如
A123@abc)→ false,符合校验要求
内容的提问来源于stack exchange,提问作者Sun
相关产品推荐
相关产品推荐

