我正在开发一个简单的密码强度检查器,我无法成功应用正则表达式。在不同的资源中定义了不同类型的正则表达式。 我也找到了javascript正则表达式,但有一些问题要适应。
首先,这些是 JAVA :
所需的正则表达式我的目标不是成为正则表达专家,我只想使用我需要的部分。如果你指导我上面讨论 java 的好教程,将不胜感激。
其次,在这个link中有一些被提及,但我遇到了应用它们的问题。
这里没有抓住小写字母(我的通行证:A5677a)
if(passwd.matches(“(?=。* [a-z])”))// [已验证]至少一个小写字母 {分数=分数+ 5;}
此外,我收到错误:非法转义字符。
if(passwd.matches(“(?=。* \ d)”))// [已验证]至少一个数字
最后,这些表达式在不同类型的编程或脚本语言中是否都有所不同?
答案 0 :(得分:1)
第一个正则表达式("(?=.*[a-z])"
)的问题在于您尝试匹配以a-z
结尾的序列; *
适用于.
,其中总体上说“匹配任何内容,然后以a
到z
的字母结尾。”
要传递文字反斜杠,您需要将其转义为"(?=.*\\d)"
。
非法转义序列是因为Java在传递给正则表达式之前尝试处理字符串中的转义序列 - \d
不会映射到任何内容,而不是\t
或{{1它映射到制表符和换行符。
为了帮助使用正则表达式简化开发过程,我建议使用The Regex Coach之类的工具,它允许您在编译程序之前测试正则表达式,以便您可以实时查看结果。还有在线资源,例如RegExr。
根据您遇到的问题,尝试运行一些正则表达式教程也不会有什么坏处。
答案 1 :(得分:0)
根据您需要的正则表达式的数量来判断,也许是您成为正则表达式专家的时候了。查看regular-expressions.info上的教程,这就是教我的正则表达式。
答案 2 :(得分:0)
我认为在这种情况下使用正则表达式会非常低效。正则表达式不会跟踪你有多少xs,ys和zs(其中x,y和z是你上面列出的任何条件) - 这意味着你需要应用多个正则表达式(因为你是在你的例子中做),每个都可能需要线性时间。
为什么不编写一个处理函数来检查密码中的每个字符呢?您可以一次完成整个检查。
部分示例:
public boolean isStrong(String toCheck) {
boolean hasLower = false;
boolean hasUpper = true;
for (int i = 0; i < toCheck.length(); i++) {
char next = toCheck.charAt(i);
if (Character.isLower(next)) {
hasLower = true;
} else if (Character.isUpper(next)) {
hasUpper = true;
}
}
return hasLower && hasUpper;
}
编辑:我刚刚注意到你正在计算得分,而不是检查弱与强;这可以很容易地进行调整。