将密码验证归类

时间:2018-11-30 19:51:51

标签: java

我有一个程序从用户处获取密码,然后它检查是否满足条件,然后输出“有效密码”或“无效密码”。这样就可以了,我能够将验证方面转换为同一程序中的方法,并且可以工作,但是我想将其变成一个我只能说if( validate(pw) == true ) ...或至少if( v.getValidation() == true ) ...的类在任何程序中,它将测试我的状况。我以前使用过自定义类,但是由于某种原因,我尝试的所有内容都无法在此类上使用,我已经花了好几天了。

这是我的方法:

public boolean validate( String pw )
{
   boolean l = false, u = false, lo = false, d = false, r = true;

   if( pw.length() >= 6 )
     { l = true; }      

   for( int i = 0; i < pw.length(); i++ )
   {
      if( Character.isUpperCase( pw.charAt(i) ) )
       { u = true; }

      if( Character.isLowerCase( pw.charAt(i) ) )
       { lo = true; }

      if( Character.isDigit( pw.charAt(i) ) )
       { d = true; }
   }

   if( l == false || u == false || lo == false || d == false )
     { r = false; }

   return r;
}

编辑:

谢谢大家的投入,这就是最后的结果:

public class Password
{
   public static boolean validate( String pw )
   {
      boolean result = false;
      int upper = 0, lower = 0, digit = 0;

      if( pw.length() >= 6 )
      {
         for( int i = 0; i < pw.length(); i++ )
         {
            if( Character.isUpperCase( pw.charAt(i) ) )
              { upper++; }

            if( Character.isLowerCase( pw.charAt(i) ) )
              { lower++; }

            if( Character.isDigit( pw.charAt(i) ) )
              { digit++; }
         }
      }

      if( upper >= 1 && lower >= 1 && digit >= 1 )
        { result = true; }

      return result;
   }
}

2 个答案:

答案 0 :(得分:2)

您不需要为此做一堂课。您可以执行以下操作:

public static void main(String[] args) {
    boolean valid = validate("PassWord22");
}
public static boolean validate( String pw ) {}

关于方法的一些注意事项:

  • 您无需在if语句中执行l == truel == false。您可以简单地做到:

    if( !l || !u || !lo || !d )
    { r = false; }
    

    实际上您可以返回

    return l && u && lo && d;
    
  • 如果长度不是6或更大,则只需返回false。这将节省检查String

  • 中的所有字母
  • 我会想出更好的变量名。单/两个字母的变量名很难区分它们代表什么,并且容易混淆。 (而不是l,您可以拥有length,而不是u,您可以拥有upper

此外,使用正则表达式和String.matches()可以更轻松地解决此问题:

public static boolean validate(String pw) {
    String pattern = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).+$";
    return (pw.length() > 5 && pw.matches(pattern));
}

答案 1 :(得分:-1)

我让它工作了,原来是编译器未选择的代码错误。我想删除问题,但由于某些原因他们不会让我。因此,以防万一您感到好奇,这就是我的班级运作的样子:

{{1}}