У меня есть код, который в настоящее время проверяет минимальный и максимальный lentgh. Я хочу также требовать прописные, строчные, специальные char и числовые. Любые предложения о том, что добавить к этому или где я могу найти несколько примеров? Я был Googling и смотрел через этот форум и пытался добавить дополнительные требования к паролю и был неудачным.
Это то, что я хочу требовать.
Длина не менее восьми символов Длина не более 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;
}
Когда вы анализируете данные String
, вы должны удалить пробелы справа и слева. Это выполняется с помощью функции Strimg#trim
следующим образом:
password = password.trim();
Чтобы проанализировать каждый символ строки, вы можете преобразовать его в массив char, поэтому вам будет легче выполнить ваши требования:
char[] arrPassword = password.toCharArray();
Теперь вы можете оценить char, используя следующие функции: Character#isUpperCase
, Character#isLowerCase
, Character#isDigit
.
И последнее, но не менее важное: у вас может быть строка со специальными символами, которые вам нужно проверить, и проверить, находится ли фактический персонаж внутри этой строки. Это может быть достигнуто с помощью String#indexOf
и String#valueOf
, это las для преобразования 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.");
- это просто проверить результат анализа фактического символа.
Как насчет некоторых старых добрых регулярных выражений? Кажется, что это работает правильно, хотя, возможно, это ускользнуло при выполнении специальной char проверки
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);
}
Стивен прав с небольшим количеством поисков, вы бы легко нашли свои ответы здесь. Но нить, на которую ссылается Стивен, - это использование библиотеки третьей стороны.
Если вы хотите реализовать это самостоятельно, то перед запуском for-loop инициализируйте 4 логических значения для ваших требований с помощью false. При циклическом проверке для всех четырех требований, пока не будет истинно. Установите соответствующее значение boolean в значение true.
Как проверить 4 требования:
После цикла проверьте 4 логических элемента и соответственно отреагируйте.