2013-03-13 9 views
5

文字列が8〜30文字でなければならない正規表現のパターン一致を作成しようとしています。数字、2文字以上(大文字小文字を区別しない)、少なくとも1文字の特殊文字、およびスペースは使用できません。文字列内の任意の順序で少なくとも2桁の2文字を一致させる正規表現

私はスペースと特殊文字が一致していますが、連続している必要はないので、2桁と2文字にスローされています。

つまり、a1b2c$またはab12$または1aab2c$と一致する必要があります。

文字のような何か?

(?=.*[a-zA-Z].*[a-zA-Z]) // Not sure. 

作品以下この文字列が、2つの文字が連続していると2つの数字は、文字、数字、特殊文字が織り込まれている場合consecutive..itに障害が発生している場合にのみ。

(?=^.{8,30}$)((?=.*\\d)(?=.*[A-Za-z]{2})(?=.*[0-9]{2})(?=.*[[email protected]#$%^&*?]{1})(?!.*[\\s]))^.* 
+5

は、あなたがこのために正規表現を必要と絶対によろしいですか? – Scorpil

+0

私は正規表現に反対し、if文と何らかの種類のstring.contains()関数を使って個々のチェックを行うだけです。 gparyaniは正規表現よりもはるかに良い解決策を示しています – user1751547

+0

これはLiferayの設定の一部なので正規表現が必要なようです。 – user2166893

答えて

5

文字を連続しないようにしたい場合は、(?=.*[a-zA-Z].*[a-zA-Z])が正しい方法です。数字は(?=.*\\d.*\\d)または(?=(.*\\d){2})です。

文字列を横断するループを使用し

(?=^.{8,30}$)(?=(.*\\d){2})(?=(.*[A-Za-z]){2})(?=.*[[email protected]#$%^&*?])(?!.*[\\s])^.* 
+1

ありがとうございます。これは動作します!まさに私が探していたもの。 – user2166893

+0

うれしい私は助けることができました:) – Pshemo

0

私はあなたが提供するあなたの例を守っはない8〜30文字です

あなたは8-30文字

(?=[^\s]*[^\sa-zA-Z0-9][^\s]*)(?=[^\s]*[a-zA-Z][^\s]*[A-Za-z][^\s]*)(?=[^\s]*\d[^\s]*\d[^\s]*)[^\s]{8,30} 
1

をしたい場合はあなたの推測はかなり正確になり、一度、このパターンを試してみてください。それは括弧で少しエレガントに見えるようにすることができます。

(?=(.*[a-zA-Z]){2}) 

あなたは正しいトラックのようですね。

3

この正規表現を試してみてください:

/** 
* Checks to see if the specified string has between 8 and 30 characters, has at least 2 digits, at least 2 letters, at least one special character, and no spaces. 
* @param s the String to be checked 
* @return s, if it passes the above test 
* @throws IllegalArgumentException if it does not 
*/ 
public static String check(String s) 
{ 
    IllegalArgumentException invalid = new IllegalArgumentException(); 
    if(s.length() < 8 || s.length() > 30) 
     throw invalid; 
    int letters = 0, numbers = 0, specialChars = 0; 
    for(char c : s.toCharArray()) 
    { 
     if(c == ' ') 
      throw invalid; 
     else if(Character.isLetter(c)) 
      ++letters; 
     else if(Character.isDigit(c)) 
      ++numbers; 
     else 
      ++specialChars; 

    } 
    if(letters < 2 || numbers < 2 || specialChars < 1) 
     throw invalid; 
    return s; 
} 
+0

正規表現を使用するとはるかに効率的です – Barnaby

関連する問題