【发布时间】:2017-06-22 12:15:18
【问题描述】:
以下代码应测试 2 个字符串(用户名和密码)的长度和允许的字符(应为 0-9.a-z、A-Z)。 legalCharacters ArrayList 由字符 a-z 和 0-9 填充。
测试适当的长度有效,但不适用于合法字符 此测试在用户名中返回非法字符错误: 用户:aba 通过:aba
public DataResponseType checkForDataErrors(String username, String password) {
responseType = null;
boolean isIllegalUsername = false;
boolean isIllegalPassword = false;
if (username.length() < 3 || username.length() > 15) {
responseType = DataResponseType.INVALID_USERNAME_LENGTH;
} else if (password.length() < 3 || password.length() > 15) {
responseType = DataResponseType.INVALID_PASSWORD_LENGTH;
} else {
for (int x = 0; x < username.length(); x++) {
for (int z = 0; z < legalCharacters.size(); z++) {
Character test = username.toLowerCase().charAt(x);
if (!test.equals(legalCharacters.get(z))) {
if (z == legalCharacters.size() - 1) {
isIllegalUsername = true;
break;
}
}
}
if (isIllegalUsername) {
break;
}
}
for (int x = 0; x < password.length(); x++) {
for (int z = 0; z < legalCharacters.size(); z++) {
Character test = password.toLowerCase().charAt(x);
if (!test.equals(legalCharacters.get(z))) {
if (z == legalCharacters.size() - 1) {
isIllegalPassword = true;
break;
}
}
}
if (isIllegalPassword) {
break;
}
}
if (isIllegalUsername) {
responseType = DataResponseType.INVALID_USERNAME_CHARACTERS;
} else if (isIllegalPassword) {
responseType = DataResponseType.INVALID_PASSWORD_CHARACTERS;
} else {
responseType = DataResponseType.VALID;
}
}
return responseType;
}
有人知道如何解决这个问题吗?还是以更简单的方式来做(我不明白谓词是如何工作的,也找不到好的解释)? 如果需要其他代码,请询问。
【问题讨论】:
-
你读过正则表达式吗?
-
使用正则表达式。它使工作变得容易下面的链接可以帮助stackoverflow.com/a/8148112/2863159
-
正则表达式示例:
if (!username.matches("^[A-Za-z0-9]+$")) responseType = DataResponseType.INVALID_USERNAME_CHARACTERS;
标签: java enums enumeration