【问题标题】:Regard Regex and pattern compilation in java关于 Java 中的正则表达式和模式编译
【发布时间】:2011-12-28 00:14:05
【问题描述】:

请给我正则表达式中的代码,用于在 java 中验证密码,该代码应由一个大写字符、一个整数、一个以下符号(@、#、$、%、^、&、+、=)和小字符组成。

我一直在尝试使用不同的单独正则表达式和一个组合正则表达式。

实际上,我已经拥有一个评估 javascript 中所有条件的正则表达式。 我无法在 Java 后端使用它。我尝试转义\。它也不起作用。

这是我的代码:

    Pattern pattern = Pattern.compile("/.*(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/");
    Matcher matcher = pattern.matcher("Aa@1");
    if(matcher.matches()){
        System.out.println("Matched");
    }
    else{
        System.out.println("No mat");
    }

原来的javascript正则表达式是

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

由于转义字符,\d 给了我错误。所以,我在 Java 版本之前添加了另一个 \

我无法理解出了什么问题。

提前致谢。

【问题讨论】:

  • 你应该举例说明你尝试过的事情。
  • @anubhava,如果支持,可以通过前瞻轻松完成。即使没有环视,您也可以排列可能的顺序,尽管在这种情况下不切实际,但这是可能的。
  • @Qtax:是的,通过所有订单的排列(并且会有很多),这是可能的,但不确定如何通过避免这些使用前瞻来轻松完成排列。
  • 您要禁止列出的 7 个以外的特殊字符吗? (请不要)否则为什么不直接说“必须有一个非字母、非数字”字符。
  • @anubhava - 你最好去阅读Mastering Regular Expressions (3rd Edition)。正则表达式可以(快速且可靠地)完成很多的事情,而这里的许多人自称是不可能的。你看,正则表达式引擎早已超越了 REGULAR(理论上的)正则表达式!任何具有前瞻功能的现代正则表达式引擎都可以轻松解决这里提出的问题。请参阅蒂姆的回答。

标签: java regex regexkitlite


【解决方案1】:

你快到了,但你错过了一些细节:

首先,起点很糟糕——JavaScript 正则表达式很丑。而不是

/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/

使用这个:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$/

然后,要将正则表达式转换为 Java,您需要删除分隔符(并使用引号代替,而不是像您所做的那样)并加倍反斜杠(就像您已经做的那样):

Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$");

现在应该可以了。

【讨论】:

    【解决方案2】:

    Java 中不需要/。它实际上会匹配一个斜线。还有,前面的.*是没用的(虽然不会影响结果)。

    Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");
    

    【讨论】:

    • 这可能会影响处理时间,尤其是在验证失败的情况下。
    • 我认为你不需要最后的 $。你也可以用你的前瞻来代替决赛。 *
    • 我用编译时间尝试了这两个表达式。这个("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?= .*[A-Z])(?=.*[@#$%^&+=]).*$") 与 tim 的 exp 相比花费的时间更少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2015-04-27
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多