2015-10-19 60 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的实例,这意味着开始以字母或下划线后跟任意长度的字字符。