在Java中使用正则表达式进行密码检查
我的应用程序具有检查密码的功能。我需要得到这个场景: 密码长度10~32 它必须是以下两者的组合:在Java中使用正则表达式进行密码检查,java,regex,Java,Regex,我的应用程序具有检查密码的功能。我需要得到这个场景: 密码长度10~32 它必须是以下两者的组合: 字符和数字 人物与特殊人物 数字和特殊字符 应用程序中的当前代码: private boolean isSpecialMixedText(String password) { String number = "[0-9]"; String english = "[a-zA-Z]"; String special = "[!@#\\$%^&*()~`\\-=_+\
- 字符和数字
- 人物与特殊人物
- 数字和特殊字符
private boolean isSpecialMixedText(String password)
{
String number = "[0-9]";
String english = "[a-zA-Z]";
String special = "[!@#\\$%^&*()~`\\-=_+\\[\\]{}|:\\\";',\\./<>?£¥\\\\]";
Pattern numberPattern = Pattern.compile(number);
Matcher numberMatcher = numberPattern.matcher(password);
Pattern englishPattern = Pattern.compile(english);
Matcher englishMatcher = englishPattern.matcher(password);
Pattern specialPattern = Pattern.compile(special);
Matcher specialMatcher = specialPattern.matcher(password);
return numberMatcher.find() && englishMatcher.find() || specialMatcher.find();
}
private boolean是特殊的混合文本(字符串密码)
{
字符串编号=“[0-9]”;
字符串english=“[a-zA-Z]”;
String special=“[!@\\$%^&*()~`\-=\\+\\[\\]{}\\\\\\]:\\\”;,\\./?¥\\\];
Pattern numberPattern=Pattern.compile(数字);
Matcher numberMatcher=numberPattern.Matcher(密码);
Pattern englishPattern=Pattern.compile(英语);
Matcher englishMatcher=englishPattern.Matcher(密码);
Pattern specialPattern=Pattern.compile(特殊);
Matcher specialMatcher=specialPattern.Matcher(密码);
返回numberMatcher.find()&&englishMatcher.find()| | specialMatcher.find();
}
请帮助我使组合工作实际上,正则表达式看起来很好。问题在下面的语句中:
return numberMatcher.find() && englishMatcher.find() ||
specialMatcher.find();
它实际上应该是这样的:
boolean n = numberMatcher.find();
boolean e = englishMatcher.find();
boolean s = specialMatcher.find();
return (n && e) || (n && s) || (e && s);
我同意@adelphus的评论。您决定哪些密码是可接受的规则是以英语为中心的。我认为您的逻辑是错误的,因为您寻求组合(因此只允许使用这些字符)of:字符和数字或字符和特殊字符或数字和特殊字符。但是,对于像:
[0-9]
和[a-zA-Z]
这样的匹配对,您实际上是在寻找一个包含一些数字和字母的字符串,但它也可能是123ABC$%\$%$$$\\\\\\\\\\\\\\\\\\\\\\\\\\\\$$$$$$$
(因为它有字母和数字)
如果给定的字符串仅由允许的字符组合组成,则需要进行检查。我认为您可以在此处使用一个正则表达式(不太优雅,但很有效),如:
表示字符串需要具有:
-至少一个字母(可能被其他字符包围的字母的正向前瞻)(?=.[A-Za-z].*)
-至少一个数字(可由其他字符包围的数字的正向前瞻)(?=.[0-9].*)
-从10到32个字母或数字, 实际上,给定的密码需要有10到32个字符,但字母和数字的比例并不重要[A-Za-z0-9]{10,32}
^
和结尾的$
确保了整个检查的字符串具有这样的组成
另外,我也同意其他人的看法,像这样限制密码中允许的字符不是最好的主意,但这是你的决定。请不要这样做。不是每个人都使用字母a..z键入,特殊字符应该是任何可键入的,而不是字母或数字,而不是碰巧出现在键盘B上的任意字符列表黑板。
^(?:((?=.*[A-Za-z].*)(?=.*[0-9].*)[A-Za-z0-9]{10,32})|((?=.*[-!@#\\$%^&*()~`\=_+\[\]{}|:\";',.\/<>?£¥\\].*)(?=.*[0-9].*)[0-9-!@#\\$%^&*()~`\=_+\[\]{}|:\";',.\/<>?£¥\\]{10,32})|((?=.*[-!@#\\$%^&*()~`\=_+\[\]{}|:\";',.\/<>?£¥\\].*)(?=.*[A-Za-z].*)[-A-Za-z!@#\\$%^&*()~`\=_+\[\]{}|:\";',.\/<>?£¥\\]{10,32}))$
(?=.*[A-Za-z].*)(?=.*[0-9].*)[A-Za-z0-9]{10,32}