2016-04-18 13 views
3

UserNameを検証するための正規表現を作成しています。ここで長さ範囲のUserNameのJava正規表現

ルールです:

  • 長さ:6から20文字
  • 手紙-ZA-Z
  • で始める必要があります缶は-ZA-Z0-9とドットを(含まれています。)
  • はここで2つの連続したドット

を持つことはできません、私が試したものです。

public class TestUserName { 

    private static String USERNAME_PATTERN = "[a-z](\\.?[a-z\\d]+)+"; 
    private static Pattern pattern = Pattern.compile(USERNAME_PATTERN, CASE_INSENSITIVE); 

    public static void main(String[] args) { 
     System.out.println(pattern.matcher("user.name").matches()); // true 
     System.out.println(pattern.matcher("user.name2").matches()); // true 
     System.out.println(pattern.matcher("user2.name").matches()); // true 

     System.out.println(pattern.matcher("user..name").matches()); // false 
     System.out.println(pattern.matcher("1user.name").matches()); // false 
    } 
} 

私が使用したパターンは良好ですが長さの制約はありません。

パターンに{6,20}制約を追加しようとしましたが、失敗しました。

"[a-z](\\.?[a-z\\d]+)+{6,20}" // failed pattern to validate length 

誰でもアイデアはありますか?

ありがとうございます!

+0

を使用することができます '{6,20}'どこ – rock321987

+0

範囲を追加することができません'{az}(\\。?[az \\ d] +){6,20}' – Andy

+0

'{6,20}'のように定義することはできません。 '+'の後はバリデーターが気にかけているものです。しかし、それを削除してもそれを修正することはありません! '(.. +)'部分を繰り返すことができます。これはあなたが望む限り長くすることができます。 – usr2564301

答えて

3

あなたはすべてのチェックのために先読み正規表現を使用することができます。私たちはすでに開始時に範囲{6,20}

  • 否定先読み(?!.*\.\.)でこの作りの合計の長さを1つの文字[a-zA-Z]と一致したため、[a-zA-Z.\d]{5,19}を使用して

    ^[a-zA-Z](?!.*\.\.)[a-zA-Z.\d]{5,19}$ 
    
    • 2つの連続するドットがある場合には、エラーをアサートする。

    等価JavaパターンNは次のようになります。

    Pattern p = Pattern.compile("^[a-zA-Z](?!.*\\.\\.)[a-zA-Z.\\d]{5,19}$"); 
    
  • 1

    私は、次の正規表現を使用します。

    ^(?=.{6,20}$)(?!.*\.\.)[a-zA-Z][a-zA-Z0-9.]+$ 
    

    (?=.{6,20}$)肯定先読みが(?!.*\.\.)否定先読みは、テキストがどの時点で..が含まれていないと確信してますしながら、テキストは、6〜20文字が含まれますを確認します。

    3

    ダブルドットを防ぐために、前方の負の外観を使用します。

    "^(?!.*\\.\\.)(?i)[a-z][a-z\\d.]{5,19}$" 
    
    • (?i)は、ケースのinsensitve(そう[a-z][a-zA-Z]を意味する)
    • (?!.*\\.\\.)は2がないことを意味しそれのどこでも連続するドット

    残りは明らかです。

    live demoを参照してください。

    1

    これはまた、マッチしたパターンを撮像する(唯一のマッチング用)

    (?=^.{6,20}$)(?=^[A-Za-z])(?!.*\.\.) 
    

    が十分では、

    (?=^.{6,20}$)(?=^[A-Za-z])(?!.*\.\.)(^.*$) 
    
    +0

    '[a-zA-Z0-9。]以外の文字は – Aaron

    +0

    @Aaronと一致します。' a-zA-Z0-9とドット。) 'とは限らず、これらを含むべきであることは特にはっきりしていません。 – rock321987