我想拒绝包含 az、AZ、0-9、-、_、@ 和 的最少 4 个字符、最多 39 个字符的用户名或密码字符串。并且字符应该是不重复和不增量的,例如“aaaa”或“1234”或“abcd”和 URL (HTTP-POST) 友好。
我一直在尝试研究String.matches()。
这部分最少 4 个字符,最多 39 个字符,带有 az、AZ、0-9 似乎并不难,但是有没有办法在符合所有这些要求的匹配项上测试字符串?
我想拒绝包含 az、AZ、0-9、-、_、@ 和 的最少 4 个字符、最多 39 个字符的用户名或密码字符串。并且字符应该是不重复和不增量的,例如“aaaa”或“1234”或“abcd”和 URL (HTTP-POST) 友好。
我一直在尝试研究String.matches()。
这部分最少 4 个字符,最多 39 个字符,带有 az、AZ、0-9 似乎并不难,但是有没有办法在符合所有这些要求的匹配项上测试字符串?
我会分别验证所有这些事情。这将使所有验证更简单、更易于理解和维护。
另外,您将知道违反了哪个约束,因此您可以向用户报告更准确的错误(例如“密码太短”而不是“您的密码应该验证以下约束:....”)
String.length()
"^[a-zA-Z0-9_@\\.-]*$"
非重复和非增量:正则表达式不是为了那个。正如评论中提到的,我会进行自定义验证(迭代输入的字符,检测字符的常量和递增序列)。像这样的东西应该工作:
public boolean isBad(String test) {
int repeating = 0;
int incremental = 0;
for (int i = 1; i < test.length(); ++i) {
char prev = test.charAt(i - 1);
char curr = test.charAt(i);
if (prev == curr) {
repeating++;
} else {
repeating = 0;
}
if (curr - prev == 1) {
incremental++;
} else {
incremental = 0;
}
if (repeating == 3) {
System.out.println("too many repeated " + curr);
return true;
}
if(incremental==3){
System.out.println("incrementing sequence");
return true;
}
}
return false;
}
url-friendly:您对字符集(字母数字和一些符号)的限制应该足够了