2013-10-25 2 views
0

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

 int digcheck=0,charcheck=0,symbcheck=0; 
     for (int i = 0; i < passwordraw.length(); i++) { 
      if (Character.isDigit(passwordraw.charAt(i))) 
      { 
       digcheck++; 
      } 
      else if(Character.isLetter(passwordraw.charAt(i))) 
      { 
       charcheck++; 
      } 
      else 
      { 
       symbcheck++; 
      }    
     } 
     if(digcheck<3) 
     { 
      digcheck=0; 
      throw new OBSSecurityException("INVALID PASSWORD! Must have atleast three(3) digits."); 
     }else if(charcheck<5) 
     { 
      charcheck=0; 
      throw new OBSSecurityException("INVALID PASSWORD! Must have atleast five(5) alpha."); 
     } 
     else if(symbcheck<1) 
     { 
      symbcheck=0; 
      throw new OBSSecurityException("INVALID PASSWORD! Must have atleast one(1) symbol."); 
     } 
+0

, в чем проблема с решением этой задачи? –

+1

offtopic, но это будет полезно, если вы решите разработать реальное программное обеспечение. Не используйте лишние восклицательные знаки и не используйте слово 'must' в этом контексте. Это всего лишь ошибка, а не астероид, который собирается уничтожить Землю. –

+2

используйте regEx вместо этого. У вас будет очень мелкозернистый контроль. – user2720864

ответ

0
int digcheck=0,charcheck=0,symbcheck=0,caseCheck=0; 
    for (int i = 0; i < passwordraw.length(); i++) { 
     if (Character.isDigit(passwordraw.charAt(i))) 
     { 
      digcheck++; 
     } 
     else if(Character.isLetter(passwordraw.charAt(i))) 
     { 
      charcheck++; 
      if(Character.isUpperCase(passwordraw.charAt(i))){ 
       caseCheck++; 
      } 
     } 
     else 
     { 
      symbcheck++; 
     }    
    } 
    if(digcheck<3) 
    { 
     digcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast three(3) digits."); 
    }else if(charcheck<5) 
    { 
     charcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast five(5) alpha."); 
    } 
    else if(symbcheck<1) 
    { 
     symbcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast one(1) symbol."); 
    } 
    else if(caseCheck<1) 
    { 
     caseCheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast one(1) Uppercase Letter."); 
    } 
0

Не используйте вложенные else-if, так как ваши условия и положения. Если условие истинно, то другие два будут пропущены.

if(digcheck<3){ 
     digcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast three(3) digits."); 
    } 

    if(charcheck<5){ 
     charcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast five(5) alpha."); 
    } 

    if(symbcheck<1){ 
     symbcheck=0; 
     throw new OBSSecurityException("INVALID PASSWORD! Must have atleast one(1) symbol."); 
    } 
+0

Эффективно нет изменений при использовании else-if-лестницы или просто, если, поскольку выполнение перенаправляется после 'throw new Exception()' – Nizam

2

использовать регулярное выражение.

сделать матч с паролем .*[A-Z]+.* это сделает ваш пароль, по крайней мере, один верхний регистр символ

[EDIT] вы также можете использовать регулярные выражения, чтобы найти другие ограничения.

иметь по крайней мере 3 цифры, вы можете использовать это регулярное выражение

.*[0-9]{1}.*[0-9]{1}.*[0-9]{1}.* 

это будет соответствовать ничего плюс 1 цифра, больше ничего, по крайней мере, одну цифру, и так далее .. Вы можете иметь подобное регулярное выражение для другая валидация, пожалуйста, чистые нам знать, если вам нужна помощь

0

Напишите метод, который проверяет, если пароль содержит по крайней мере один символ верхнего регистра:

public boolean containsAtLeastOneUpperCase(String password) { 
    for(Character c : password.toCharArray()) { 
     if (Character.isUpperCase(c)) { 
      return true; 
     } 
    } 
    return false; 
} 
Смежные вопросы