【问题标题】:Regular expression for user id用户 id 的正则表达式
【发布时间】:2014-06-19 10:40:57
【问题描述】:

我是正则表达式的新手。

我需要编写一个符合以下条件的正则表达式

  • 用户 ID 不能全是数字
  • 用户 ID 不能有特殊字符
  • 最少 8 个字符
  • 最大长度为 20 个字符
  • 可以全部是字母
  • 可以是字母数字

我已经写了下面的表达式但是它不起作用

^[a-zA-Z\\d*]{8,20}$

【问题讨论】:

  • 在什么情况下不起作用?错误信息是什么?输出与您的预期有何不同?
  • 如果我将输入作为“aaaaaaaa123”返回true,实际输出应该是false。
  • 为什么aaaaaaaa123 应该是假的?
  • 抱歉输入“aaaaaaaa123”应该返回真,但对于我的正则表达式它返回假。

标签: java regex


【解决方案1】:

你可以用这个:

(?i)^(?=.*[a-z])[a-z0-9]{8,20}$

查看demo 什么有效,什么失败

  • (?i) 使其不区分大小写
  • ^ 断言我们在字符串的开头
  • 前瞻 (?=.*[a-z]) 检查我们是否至少有一个字母
  • [a-z0-9]{8,20} 匹配 8 到 20 个字母或数字(字母也可以是大写)
  • $ 断言我们已经到达字符串的末尾

【讨论】:

  • 你给出的正则表达式在java中运行良好,但在javaScript中它失败了。
  • 是的,(?i) 在 JS 中不存在。要在 JS 中设置不区分大小写模式,可以这样操作:/^(?=.*[a-z])[a-z0-9]{8,20}$/i
【解决方案2】:

你可以使用这个正则表达式:

^(?!\\d+$)\\w{8,20}$

Working Demo

【讨论】:

    【解决方案3】:

    尝试使用此代码并检查:

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("^(?!\\d+$)\\w{8,20}$");
        Matcher matcher = pattern.matcher("Tryurcode4u");
        System.out.println("Input String matches regex - "+matcher.matches());
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2015-01-11
      • 1970-01-01
      • 2011-02-15
      • 2011-07-12
      相关资源
      最近更新 更多