2015-07-27 2 views
0

У меня есть рабочая регистрация в моем приложении, и следующий код является небольшой частью этого. Как вы можете видеть, существует множество требований для проверки пароля/имени пользователя.Требуется ввести пароль, чтобы иметь заглавную букву и номер?

Три из них похожи и не работают. Это три строки: upperCaseChars, lowerCaseChars и числа. Я попытался сделать это так, чтобы пароль должен содержать заглавную букву, строчную букву и номер перед тем, как вызвать «insertToDatabase».

Я искал по всему Интернету и не мог найти то, что искал. P.S: Я хочу добавить его так же, как другие требования в выражении if. Любой способ сделать это?

public void invokeRegister(View view) { 
     String name = editTextName.getText().toString(); 
     String pass = editTextPass.getText().toString(); 
     String pass2 = editTextPass2.getText().toString(); 
     String upperCaseChars = "(.*[A-Z].*)"; 
     String lowerCaseChars = "(.*[a-z].*)"; 
     String numbers = "(.*[0-9].*)"; 

     if (name.length() >= 4 && name.length() <= 12 && (pass.length() >= 6 && pass.length() <= 18 && (pass2.length() >= 0 && (pass.equals(pass2)) && pass.contains(upperCaseChars)))) { 
      insertToDatabase(name, pass); 
+2

Вы пытаетесь использовать 'String.matches', поскольку' String.contains' не использует регулярное выражение? –

+0

Вы действительно хотите, чтобы максимальная длина пароля составляла 18? –

+0

Еще в стадии тестирования. Вы считаете, что 18 слишком длинный? – Calis

ответ

1

Проверка наличия заглавной буквы проще, чем вы думаете. Преобразуйте всю строку в нижний регистр и посмотрите, соответствует ли она исходной строке.

Пример:

String pass = "password" 
if(!pass.equals(pass.toLowerCase())) //fails 

String pass = "passWord"; 
//lower casing becomes "password" and as a result, "passWord" doesn't match "password" 
if(!pass.equals(pass.toLowerCase())) //passes 

И выполнить обратный, чтобы проверить строчную букву:

if(!pass.equals(pass.toUpperCase())) 

Далее для критериев для обеспечения пароля содержит ряд, попробуйте следующее:

String pass = "pa55w0rd"; 
if(pass.matches(".*\\d+.*")) //passes 

Нажмите here, чтобы увидеть, как работает это регулярное выражение.


Условие комбинированное:

if(!pass.equals(pass.toLowerCase()) && 
    !pass.equals(pass.toUpperCase()) && 
    pass.matches(".*\\d+.*") 
) 
+0

Спасибо! Это работает. Вопрос решен. – Calis

0

Путь вы его настроить теперь не будет работать, потому что он ищет всю строку букв (от А до Z) в пароле. Что вы можете сделать, так это создать свой собственный метод, который вернет true, если три логические значения станут истинными (например: hasCapital, hasLowercase, hasNumeral). Я бы рекомендовал использовать массив символов и затем сравнить каждый символ в строке пароля с каждым символом в массиве допустимых символов для каждого условия.

Имейте в виду, что, вероятно, гораздо лучшие решения, чем этот. Но это сработает.

Смежные вопросы