0
public class LockAppActivity extends Activity{

    EditText pass1, pass2;
    Button back, next;
    SharedPreferences prefs;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lockapp);

        pass1 = (EditText) findViewById(R.id.edit1);
        pass2 = (EditText) findViewById(R.id.edit2);

        back = (Button) findViewById(R.id.back);
        back.setOnClickListener(new View.OnClickListener() {    
            public void onClick(View v1) {
                Intent setIntent = new Intent(Intent.ACTION_MAIN);
                setIntent.addCategory(Intent.CATEGORY_HOME);
                setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(setIntent); 
            }
        });

        next = (Button) findViewById(R.id.next);
        next.setOnClickListener(new View.OnClickListener() {
            String password1 = "";
            String password2 = "";

            public void onClick(View v){

                password1 = pass1.getText().toString();
                password2 = pass2.getText().toString();             

                if (!password1.equals("")){

                    if (password1.length() >= 15){
                        Pattern pattern = Pattern.compile("[[0-9]&&[a-z]&&[A-Z]]");
                        Matcher matcher = pattern.matcher(password1);   

                        if(matcher.matches()){                      

                            if (password1.equals(password2)){
                                //SavePreferences("Password", password1);
                                Intent intent = new Intent(LockAppActivity.this, PhoneNumActivity.class);
                                startActivity(intent);
                            }
                            else{
                                pass1.setText("");
                                pass2.setText("");
                                Toast.makeText(LockAppActivity.this,"Not equal",Toast.LENGTH_LONG).show();
                            }
                        }
                        else{
                            pass1.setText("");
                            pass2.setText("");
                            Toast.makeText(LockAppActivity.this,"Not matched",Toast.LENGTH_LONG).show();
                        }
                    }
                    else{
                        pass1.setText("");
                        pass2.setText("");
                        Toast.makeText(LockAppActivity.this,"Length",Toast.LENGTH_LONG).show();
                    }                       
                }
                else{
                    pass1.setText("");
                    pass2.setText("");
                    Toast.makeText(LockAppActivity.this,"Nothing",Toast.LENGTH_LONG).show();
                }
            }
        });
    }

    private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
    }
}

当我输入有效密码时遇到问题,但它会弹出一个提示“不匹配”的吐司,以及我将如何在应用程序中保存此密码,当输入新密码时,它将更新并覆盖旧密码

4

2 回答 2

2

在 Java regex 风格中,&&是一个集合交集运算符。它仅在字符类中使用。你的正则表达式:

[[0-9]&&[a-z]&&[A-Z]]

...尝试精确匹配一个字符,该字符必须是所有三个集合[0-9][A-Z]和的成员[a-z]。显然,没有这样的性格。使用正则表达式验证密码的最常用技术是使用单独的前瞻来匹配每个所需的字符类型,然后进行“真实”匹配以验证长度和整体组成。在您的情况下,它可能如下所示:

^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[0-9A-Za-z]{15,}$

您正在使用该matches()方法来应用正则表达式,因此您实际上不必使用开始和结束锚点(^$),但这并没有什么坏处,并且它可以更清楚地向必须阅读您的任何人传达您的意图稍后代码。

请注意,我只是更正您的正则表达式以符合您规定的标准,而不是评论标准本身。如果代码的特定于 Android 的部分有任何错误,我也不知道。

于 2012-05-15T05:26:12.387 回答
0

您可以使用正则表达式验证密码,如下所示

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PasswordValidator{

  private Pattern pattern;
  private Matcher matcher;

  private static final String PASSWORD_PATTERN = 
          "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";

  public PasswordValidator(){
      pattern = Pattern.compile(PASSWORD_PATTERN);
  }

  /**
   * Validate password with regular expression
   * @param password password for validation
   * @return true valid password, false invalid password
   */
  public boolean validate(final String password){

      matcher = pattern.matcher(password);
      return matcher.matches();

  }
}

请参阅此处了解更多信息:http ://www.mkyong.com/regular-expressions/how-to-validate-password-with-regular-expression/

于 2012-05-15T04:22:07.170 回答