Java 正则表达式a-z 0-9,但不仅仅是数字
尝试仅匹配长度为10-30个字符的字符串,字符串中仅包含a-z和0-9(但不包括数字)。似乎可以工作,除非字符串以数字开头,然后失败。 不确定\D应该修复的不仅仅是数字Java 正则表达式a-z 0-9,但不仅仅是数字,java,regex,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
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
\D
速记类表示任何非数字符号
。您应该将其从模式中删除(使其成为“^[A-Za-z0-9_-]{10,30}$”
),以便匹配返回true,因为1
是1EEE333E
中的一个数字
如果要放置限制(字符串不能仅由数字组成),请使用锚定的前瞻:
^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$
这是
或者,使用i
修饰符使模式不区分大小写的缩短版本:
(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$
另一种方式:^(?=(?:.[a-zA-Z])+)([a-zA-Z\d]{10,30})$
更新
我用一个版本更新了答案,不允许只使用数字字符串。很好+1对于负面展望,我建议你阅读。它非常有用。这不是JavaScript,请参阅post标记。在Java中,不能像在JavaScript或PHP中那样使用正则表达式分隔符。