作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
尝试仅匹配长度为 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
最佳答案
\D
速记类表示任何非数字符号
。您应该将其从模式中删除(使其变为 "^[A-Za-z0-9_-]{10,30}$"
),以便 匹配
到返回 true,因为 1
是 1eeeeeeeeee333e
中的一个数字。
如果你想放置一个限制(字符串不能只包含数字)使用锚定的前瞻:
^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$
这里是 a demo
或者,使用 i
修饰符使模式不区分大小写的缩短版本:
(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$
关于java - 正则表达式 a-z 0-9 但不仅仅是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266173/
我是一名优秀的程序员,十分优秀!