【发布时间】:2016-08-10 09:28:26
【问题描述】:
我正在编写一个正则表达式来验证用户名。
规则如下:
- 长度:6 - 20 个字符
- 必须以字母 a-zA-Z 开头
- 可以包含 a-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
有人有什么想法吗?
谢谢!
【问题讨论】:
-
你不能在任何地方附加
{6,20} -
范围定义不应跟随,而是使用而不是加号('+'):
[a-z](\\.?[a-z\\d]+){6,20} -
{6,20}后面的+是验证器犹豫不决的地方。但删除它不会修复它!它将允许重复(..+)部分,这可以根据您的需要进行。
标签: java regex validation