尝试仅匹配10-30个字符长的字符串,字符串中只有a-z和0-9(但不仅仅是数字)。似乎工作除了字符串以数字开头然后失败。 不确定\ D应该修复不仅数字
static final Pattern UNIQUE_ID_PATTERN = Pattern.compile("^\\D[A-Za-z0-9_-]{10,30}$");
UNIQUE_ID_PATTERN.matcher("1eeeeeeeee333e").matches(); // Does not work
UNIQUE_ID_PATTERN.matcher("eeeeeeeee333e").matches(); // Works
答案 0 :(得分:9)
\D
简写类意味着any non-digit symbol
。您应该将其从模式中移除(以便它变为"^[A-Za-z0-9_-]{10,30}$"
),matches
返回true,因为1
是1eeeeeeeee333e
中的数字。
如果您想要设置限制(字符串不能只包含数字),请使用锚定的预测:
^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$
这是a demo
或者,带有i
修饰符的缩短版本使模式不区分大小写:
(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$
答案 1 :(得分:1)