我有一些代码目前检查最小和最大lentgh。我还想要大写,小写,特殊字符和数字。关于添加到此内容或在哪里可以找到一些示例的任何建议?我一直在谷歌搜索并通过这个论坛寻找,并一直在尝试添加额外的密码要求,但一直没有成功。
这就是我想要的。
长度至少为八个字符 长度不超过20个字符 至少小写字母和一个大写字母 至少有一个特殊角色:!@#$%^& *()~` - = _ + [] {} |:“;',。/<>? 至少有一个数字[0-9]字符 无法匹配帐户登录名或电子邮件地址
我目前的密码验证码
public static final int MIN_PASSWORD_LENGTH = 8;
public static final int MAX_PASSWORD_LENGTH = 20;
public static boolean isAcceptablePassword(String password)
{
if(TextUtils.isEmpty(password))
return false;
int len = password.length();
if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH)
return false;
for(int i = 0; i < len; i++)
{
char c = password.charAt(i);
if (Character.isWhitespace(c))
return false;
}
return true;
}
答案 0 :(得分:4)
当您分析String
数据时,您应该删除右侧和左侧的空白。这是由Strimg#trim
函数完成的,如下所示:
password = password.trim();
要分析String的每个字符,您可以将其转换为char数组,以便更容易满足您的要求:
char[] arrPassword = password.toCharArray();
现在,您可以使用以下函数评估字符:Character#isUpperCase
,Character#isLowerCase
,Character#isDigit
。
最后但并非最不重要的是,您可以使用需要检查的特殊字符的String,并检查您正在评估的实际字符是否在该String内。这可以使用String#indexOf
和String#valueOf
来实现,这可以将char转换为String类型。
以下是所有这些解释的代码示例:
public static final String SPECIAL_CHARACTERS = "!@#$%^&*()~`-=_+[]{}|:\";',./<>?";
public static final int MIN_PASSWORD_LENGTH = 8;
public static final int MAX_PASSWORD_LENGTH = 20;
public static boolean isAcceptablePassword(String password) {
if (TextUtils.isEmpty(password)) {
System.out.println("empty string.");
return false;
}
password = password.trim();
int len = password.length();
if(len < MIN_PASSWORD_LENGTH || len > MAX_PASSWORD_LENGTH) {
System.out.println("wrong size, it must have at least 8 characters and less than 20.");
return false;
}
char[] aC = password.toCharArray();
for(char c : aC) {
if (Character.isUpperCase(c)) {
System.out.println(c + " is uppercase.");
} else
if (Character.isLowerCase(c)) {
System.out.println(c + " is lowercase.");
} else
if (Character.isDigit(c)) {
System.out.println(c + " is digit.");
} else
if (SPECIAL_CHARACTERS.indexOf(String.valueOf(c)) >= 0) {
System.out.println(c + " is valid symbol.");
} else {
System.out.println(c + " is an invalid character in the password.");
return false;
}
}
return true;
}
System.out.println(c + " is an invalid character in the password.");
句只是检查分析实际角色的结果。
答案 1 :(得分:2)
一些好的旧正则表达式怎么样?这似乎工作正常,虽然可能在逃避特殊字符检查时失误
Pattern[] checks = {
Pattern.compile("[!@#\\$%^&*()~`\\-=_+\\[\\]{}|:\\\";',\\./<>?]"),
Pattern.compile("\\d+"),
Pattern.compile("[A-Z]+"),
Pattern.compile("[a-z]+"),
Pattern.compile("^.{8,20}$") };
for (String test : new String[] { "password", "Password1",
"Password1&", "toolongtoolongtoolong" }) {
boolean ok = true;
for (Pattern check : checks) {
ok = ok && check.matcher(test).find();
}
System.out.println(test + " " + ok);
}
答案 2 :(得分:0)
如果你想自己实现这个,那么在开始for循环之前,用false初始化4个布尔值。循环检查所有四个要求,直到有一个为真。将相应的布尔值设置为true。
如何检查4项要求:
循环检查4个布尔值并做出相应的反应。