1

请给我正则表达式中的代码,用于在 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 版本中添加了另一个。

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

提前致谢。

4

2 回答 2

4

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

首先,起点很糟糕——JavaScript 正则表达式很丑。代替

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

用这个:

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

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

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

现在它应该可以工作了。

于 2011-12-27T16:13:41.920 回答
1

Java 中不需要/'s。它实际上会匹配一个斜线。此外,领先.*是无用的(尽管它不会影响结果)。

Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");
于 2011-12-27T16:14:05.633 回答