任务需求如下:
1.密码的长度不少于8位
2.连续的字母和数字不能超过4个,譬如abcd、1234
3.不能出现连续4个的键盘序列,譬如qwer
拿到需求后,就往正则表达式方面去想。然而没有学过正则表达式,看了正则表达式相当的资料还是不懂就慌了。后来整理了一下思路,不用正则表达式的方式来写。
第一个要求很简单跳过。
第二个要求一开始是打算自己写方法来判断,每个字符都跟后面的3个字符比较,就是很蠢笨的方法。后来大神给了提示,用一个编写好了的序列来做比较即可。
第三个要求其实跟第二个要求一样,只是换一个比较的序列。
代码如下:
public static String validate(String str) {
if (str.length() < 8) {
return "长度小于8位!";
} else {
String validateStr1 = "abcdefghijklmnopqrstuvwxyz\tzyxwvutsrqponmlkjihgfedcba\t0123456789\t987654321";
String[] validateStr2 = new String[] { "qwertyuiop[]", "][poiuytrewq", "asdfghjkl;'", "';lkjhgfdsa",
"zxcvbnm,./", "/.,mnbvcxz", "~!@#$%^&*()_+", "+_)(*&^%$#@!~" };
for (int i = 0; i <= str.length() - 4; i++) {
String s = str.toLowerCase().substring(i, i + 4);
if (validateStr1.contains(s)) {
return "连续字母或数字超过4个!";
} else {
for (String ms : validateStr2) {
if (ms.contains(s)) {
return "出现连续4个键盘序列!";
}
}
}
}
}
return "验证成功!";
}