2016-12-01 4 views
-1

私はこのタイプの文字の少なくとも3種類が含まれているAndroid上で正規表現したい:私は、この正規表現を見つけたアンドロイド正規表現は

Number, upper letter, lower letter and special characters, 

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&])[A-Za-z\[email protected]$!%*?&]{8,100} 

しかし、これは、最小8と最大10文字、少なくとも1大文字アルファベット、1小文字アルファベット、1数字と1特殊文字を伝えます。 しかし、私はこの4つのタイプから3つのタイプを必要とします。例えば

このパスワードが有効である:

Test1987(それは3種類=上位文字、下、および数字が含まれているため) & est7sss(有効あまりにもそれが特殊文字、数字、下の文字を含む)

有効でない

パスワード:

test1987は私がすることをしてください行うことができますどのように

(2つだけ型の下部と数字が含まれています)

----------------- EDIT -------------

私はこのようなfonctionを使用し、動作しているようです

public boolean validatePassword(final String password){ 
     Integer numberType = 0; 
     if(password.length() > 7){ 

     if (password.matches(".*\\d.*")) { 
      numberType = numberType + 1; 
     } 
     if (password.matches(".*[a-z].*")) { 
      numberType = numberType + 1; 
     } 
     if (password.matches(".*[A-Z].*")) { 
      numberType = numberType + 1; 
     } 
     if (!password.matches("[A-Za-z0-9 ]*")) { 
      numberType = numberType + 1; 
     } 
     } 
     else{ 
      return false; 

     } 

     if(numberType>2) 
      return true; 
     return false; 

    } 
+0

私は明確化を求めると、あなたが話している種類についてより具体的に試してみたいですか? –

+0

私は例を使って自分の質問を編集していますが、それを読んでより明確であれば教えてください。 – tamtoum1987

+1

純粋な正規表現の解決策はこれは醜いでしょう。コードでこれを処理する方が良いでしょう。 – anubhava

答えて

1
public boolean validatePassword(final String password){ 
     Integer numberType = 0; 
     if(password.length() > 7){ 

     if (password.matches(".*\\d.*")) { 
      numberType = numberType + 1; 
     } 
     if (password.matches(".*[a-z].*")) { 
      numberType = numberType + 1; 
     } 
     if (password.matches(".*[A-Z].*")) { 
      numberType = numberType + 1; 
     } 
     if (!password.matches("[A-Za-z0-9 ]*")) { 
      numberType = numberType + 1; 
     } 
     } 
     else{ 
      return false; 

     } 

     if(numberType>2) 
      return true; 
     return false; 

    } 
+0

100以下の条件も必要ありません – vks