【问题标题】:How to validate Password Field in android?如何验证android中的密码字段?
【发布时间】:2016-04-12 13:03:58
【问题描述】:

您好,我是 android 新手,在我的应用中我有 Validations for Change password 页面。

这意味着密码必须包含至少 8 个字符,至少 1 个字母、1 个数字和 1 个特殊字符,为此我尝试了下面的代码,但它不起作用。

请帮帮我。

if(!isPasswordValidMethod(newPassword.getText().toString())){
           System.out.println("Not Valid");

                }else{

        System.out.println("Valid");
    }



     // Validate password
        private boolean isPasswordValidMethod(String password) {

            String yourString = newPassword.getText().toString();

            System.out.println("yourString is =" + yourString);

            boolean isValid = false;

            // ^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$
            // ^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$

            String expression = "^(?=.*[A-Za-z])(?=.*\\\\d)(?=.*[$@$!%*#?&])[A-Za-z\\\\d$@$!%*#?&]{8,}$";
            CharSequence inputStr = password;

            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(inputStr);
            if (matcher.matches()) {
                System.out.println("if");
                isValid = true;
            }else{
                System.out.println("else");
            }
            return isValid;
        }

【问题讨论】:

标签: android


【解决方案1】:

尝试以下代码

 //*****************************************************************
public static boolean isValidPassword(final String password) {

    Pattern pattern;
    Matcher matcher;
    final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.*[@#$%^&+=!])(?=\\S+$).{4,}$";
    pattern = Pattern.compile(PASSWORD_PATTERN);
    matcher = pattern.matcher(password);

    return matcher.matches();

}

把你的代码改成这个

   if(newPassword.getText().toString().length()<8 &&!isValidPassword(newPassword.getText().toString())){
        System.out.println("Not Valid");
      }else{
       System.out.println("Valid");
    }

【讨论】:

  • if(newPassword.getText().toString().length()
  • 即验证条件
  • 最少 8 个字符意味着它必须是 "&&" 而不是 ||
  • 这种模式的条件是什么,例如密码必须包含最少 8 个字符,必须是字母数字,必须包含至少一个符号。像这样? @mdDroid
  • 对于任何想知道的人...... 正则表达式表示用户至少需要输入1 Uppercase, 1 Number and 1 Symbol
【解决方案2】:
public static boolean isValidPassword(String s) {
            Pattern PASSWORD_PATTERN
                    = Pattern.compile(
                    "[a-zA-Z0-9\\!\\@\\#\\$]{8,24}");

            return !TextUtils.isEmpty(s) && PASSWORD_PATTERN.matcher(s).matches();
        }

使用它,

if(isValidPassword(password)){ //password valid}

你可以在这里设置任何你允许的符号

【讨论】:

    【解决方案3】:
    public static boolean passwordCharValidation(String passwordEd) {
        String PASSWORD_PATTERN = "^(?=.*[A-Z])(?=.*[@_.]).*$";
        Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
        Matcher matcher = pattern.matcher(passwordEd);
        if (!passwordEd.matches(".*\\d.*") || !matcher.matches()) {
            return true;
        }
        return false;
    }
    

    【讨论】:

    • 您是否完整回答:它包含至少 8 个字符,至少 1 个字母、1 个数字和 1 个特殊字符。谢谢
    • yes 首先检查passwordEd长度是否大于8 if(passwordEd.length() > 8);
    【解决方案4】:

    试试这个,效果很好

       public static boolean isPasswordValidMethod(final String password) {
    
        Pattern pattern;
        Matcher matcher;
        final String PASSWORD_PATTERN = "^(?=.*[A-Za-z])(?=.*\\\\d)(?=.*[$@$!%*#?&])[A-Za-z\\\\d$@$!%*#?&]{8,}$""
        pattern = Pattern.compile(PASSWORD_PATTERN);
        matcher = pattern.matcher(password);
    
        return matcher.matches();
    
    }
    

    【讨论】:

      【解决方案5】:
        String validPassword = "12345";
                           _Password_String = Password.getText().toString();
                          Matcher matcher = Pattern.compile(validPassword).matcher(_Password_String);
                          if (matcher.matches()) {
                              Log.e("d11", _Password_String);
                              Toast.makeText(getActivity(), "Password Match", Toast.LENGTH_LONG).show();
                              getFragmentManager().popBackStack();
      
      
                          } else {
                              Password.setError("Password");
                              Toast.makeText(getActivity(), "Password not Match", Toast.LENGTH_LONG).show();
                          }
      

      【讨论】:

        【解决方案6】:

        用于电子邮件字段验证和密码验证的简单代码,并检查密码字段中至少 8 个字符。

          if (isValidEmail(et_regemail.getText().toString())&&etpass1.getText().toString().length()>7){
              if (validatePassword(etpass1.getText().toString())) {
              Toast.makeText(getApplicationContext(),"Go Ahead".....
              }
              else{
        
               Toast.makeText(getApplicationContext(),"InvalidPassword".....
               }
        
        }else{
        
         Toast.makeText(getApplicationContext(),"Invalid Email".....
        }
        
        
        public boolean validatePassword(final String password){
            Pattern pattern;
            Matcher matcher;
            final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(?=.* 
            [@#$%^&+=!])(?=\\S+$).{4,}$";
            pattern = Pattern.compile(PASSWORD_PATTERN);
            matcher = pattern.matcher(password);
        
            return matcher.matches();
        }
        
        public final static boolean isValidEmail(CharSequence target) {
            if (target == null)
                return false;
        
            return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
        }
        

        【讨论】:

          【解决方案7】:

          简单和排序,只需使用以下方法检查有效密码,

          public static boolean isValidPassword(String password) {
              Matcher matcher = Pattern.compile("((?=.*[a-z])(?=.*\\d)(?=.*[A-Z])(?=.*[@#$%!]).{4,20})").matcher(password);
              return matcher.matches();
          }
          

          您可以使用以下方法

                    if (!isValidPassword(edtPassword.getText().toString())) {
                          errorDialog("Password must contain mix of upper and lower case letters as well as digits and one special charecter(4-20)");
                          }
          

          【讨论】:

            【解决方案8】:

            密码不匹配

            if  (password.getText().toString() != reEnteredPassword.getText().toString()) {
            //not match
            }
            

            对于空字段

            if (password.getText().toString().isEmpty() || reEnteredPassword.getText().toString().isEmpty()) {
            //Fieds empty error message
            

            少于 8 个字符

            if ((password.getText().toString().length() < 8) || (reEnteredPassword.getText().toString().length() < 8)) {
            // less than 8 characters error message
            }
            

            没有特殊字符

            if (!password.getText().toString().matches( "^(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*+=?-]).{8,15}$") || !reEnteredPassword.getText().toString().matches( "^(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*+=?-]).{8,15}$")){
            //not having special characters error message
            }
            

            【讨论】:

            • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
            猜你喜欢
            • 2023-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-26
            • 2017-10-10
            • 2011-06-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多