2015-10-19 35 views
5

我正在使用Java正則表達式來驗證用戶名。他們必須符合以下約束:Java正則表達式驗證用戶名長度

  1. 用戶名可以包含字母數字字符和/或下劃線(_)。

  2. 用戶名不能以數字字符開頭。

  3. 8≤|用戶名| ≤30

我結束了以下的正則表達式:

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

的問題是,與長度的用戶名> 30不是儘管具有長度< 8所述一個防止防止。我的正則表達式有什麼問題?

回答

11

可以使用:

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

^[A-Za-z_]確保輸入以字母表或下劃線開始,然後[A-Za-z0-9_]{7,29}$確保有到底使得總長度830的單詞字符7至29。

或者你也可以縮短到:

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

您正則表達式嘗試匹配的([A-Za-z_][A-Za-z0-9_]*) 8至30的實例,這意味着開始以字母或下劃線後跟任意長度的字字符。