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 正規表現フレーバーで&&は、集合交差演算子です。文字クラス内でのみ使用されます。あなたの正規表現:

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

[0-9]...は、セット、[A-Z]、およびの 3 つすべてのメンバーである必要がある 1 文字との一致を試みます[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 に答える