【问题标题】:REGEX a-z 0-9 but not only numbers正则表达式 a-z 0-9 但不仅仅是数字
【发布时间】:2015-11-22 19:51:30
【问题描述】:

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

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

    Demo

    More details

    【讨论】:

    • 这不是 JavaScript,请参阅帖子标签。在 Java 中,您不能像在 JavaScript 或 PHP 中那样使用正则表达式分隔符。
    【解决方案2】:

    \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}$
    

    【讨论】:

    猜你喜欢
    • 2011-04-01
    • 2011-09-17
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2010-12-11
    相关资源
    最近更新 更多