2014-04-22 25 views
16

Come posso convalidare lo EditText con Regex consentendo caratteri particolari. La mia condizione è:Espressione regolare nel campo Android per password

password Regola:

  1. Una lettera maiuscola
  2. Un numero
  3. Un simbolo(@,$,%,&,#,) qualunque simboli che sono accettabili normale.

    Posso sapere qual è il modo corretto per raggiungere il mio obiettivo?

+1

lunghezza minima? –

risposta

47

Prova questa Maggio aiuta

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{4,}$ 

Come funziona?

^     # start-of-string 
(?=.*[0-9])  # a digit must occur at least once 
(?=.*[a-z])  # a lower case letter must occur at least once 
(?=.*[A-Z])  # an upper case letter must occur at least once 
(?=.*[@#$%^&+=]) # a special character must occur at least once you can replace with your special characters 
(?=\\S+$)   # no whitespace allowed in the entire string 
.{4,}    # anything, at least six places though 
$     # end-of-string 

Come implementare?

public class MainActivity extends Activity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final EditText editText = (EditText) findViewById(R.id.edtText); 
     Button btnCheck = (Button) findViewById(R.id.btnCheck); 

     btnCheck.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       if (isValidPassword(editText.getText().toString().trim())) { 
        Toast.makeText(MainActivity.this, "Valid", Toast.LENGTH_SHORT).show(); 
       } else { 
        Toast.makeText(MainActivity.this, "InValid", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

    } 

    public boolean isValidPassword(final String password) { 

     Pattern pattern; 
     Matcher matcher; 

     final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{4,}$"; 

     pattern = Pattern.compile(PASSWORD_PATTERN); 
     matcher = pattern.matcher(password); 

     return matcher.matches(); 

    } 

} 
+0

dare il motivo per il basso voto la risposta –

+0

Non so. Una persona anonima probabilmente lo fa. Ho accettato la tua risposta. Si prega di votare questa domanda. Buona codifica –

+1

Ho già messo in discussione la tua domanda –

5

Prova questo.

(/^(?=.*\d)(?=.*[A-Z])([@$%&#])[0-9a-zA-Z]{4,}$/) 


(/^ 
(?=.*\d)    //should contain at least one digit 
(?=.*[@$%&#])   //should contain at least one special char 
(?=.*[A-Z])    //should contain at least one upper case 
[a-zA-Z0-9]{4,}   //should contain at least 8 from the mentioned characters 
$/) 
+1

Si prega di motivare il voto negativo della risposta? –

+0

Sono estremamente dispiaciuto. Qualcuno giù vota le mie domande e include tutte le risposte. Non l'ho fatto Ho votato la tua risposta. Si prega di votare questa domanda. –

+1

Ho votato. –

1

è possibile utilizzare la classe di PaternMatcher per tutti i formati di controllo.

Vi do un esempio di utilizzo:

 Pattern pattern = Pattern.compile("[email protected]+\\.[a-z]+"); 
     Matcher matcher = pattern.matcher(myEmailString); 
     if (!myEmailString.contains("@") || !matcher.matches()) { 
      // error in the email : do staff 
      myEmailView.setError("invalid email !"); 

     } 
+0

Thx per il meno ... la prossima volta dite "NON È QUELLO CHE STA CERCANDO!". Sono davvero dispiaciuto se non ho capito bene la tua domanda ... –

2
try { 
    if (subjectString.matches("^(?=.*[@$%&#_()=+?»«<>£§€{}\\[\\]-])(?=.*[A-Z])(?=.*[a-z])(?=.*\\d).*(?<=.{4,})$")) { 
     // String matched entirely 
    } else { 
     // Match attempt failed 
    } 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 


(?=.*[@\$%&#_()=+?»«<>£§€{}.[\]-]) -> must have at least 1 special character 
(?=.*[A-Z]) -> Must have at least 1 upper case letter 
(?=.*[a-z]) -> Must have at least 1 lower case letter 
(?=.*\\d)  -> Must have at least 1 digit 
(?<=.{4,})$") -> Must be equal or superior to 4 chars.