REGEX a-z 0-9但不仅仅是数字

时间:2015-08-28 08:02:25

标签: java regex

尝试仅匹配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

2 个答案:

答案 0 :(得分:9)

\D简写类意味着any non-digit symbol。您应该将其从模式中移除(以便它变为"^[A-Za-z0-9_-]{10,30}$"),matches返回true,因为11eeeeeeeee333e中的数字。

如果您想要设置限制(字符串不能只包含数字),请使用锚定的预测:

^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$

这是a demo

或者,带有i修饰符的缩短版本使模式不区分大小写:

(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$

答案 1 :(得分:1)

另一种方式: ^(?=(?:.*[a-zA-Z])+)([a-zA-Z\d]{10,30})$ 更新

<强> Demo

More details