2015-10-19 16 views
5

Ich benutze Java Regex um einen Benutzernamen zu validieren. Sie müssen folgende Randbedingungen erfüllen:Java Regex validiere Benutzernamen Länge

  1. Benutzername kann alphanumerische Zeichen und/oder Unterstriche (_) enthalten.

  2. Der Benutzername darf nicht mit einem numerischen Zeichen beginnen.

  3. 8 ≤ | Benutzername | ≤ 30

beendet I mit folgenden regex up:

String regex="^([A-Za-z_][A-Za-z0-9_]*){8,30}$"; 

Das Problem ist, dass Nutzernamen mit einer Länge von> 30 nicht verhindert werden, obwohl die Länge eines mit < 8 verhindert. Was ist los mit meiner Regex? verwenden

Antwort

11

können Sie:

String pattern = "^[A-Za-z_][A-Za-z0-9_]{7,29}$"; 

^[A-Za-z_] Eingabe stellen sicher, mit einem Alphabet beginnt oder unterstreichen und dann machen [A-Za-z0-9_]{7,29}$ sicher, dass es 7-29 von Wortzeichen ist in dem Ende Gesamtlänge 8-30 machen.

Oder Sie können es verkürzen:

String pattern = "^[A-Za-z_]\\w{7,29}$"; 

Sie regex versucht 8-30 Instanzen von ([A-Za-z_][A-Za-z0-9_]*) übereinstimmen, die mit einem Alphabet bedeutet beginnen oder Strich durch ein Wort char beliebiger Länge gefolgt.