[英]Regard Regex and pattern compilation in java
请给我正则表达式中用于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版本中添加了另一个\\
。
我无法理解出了什么问题。
提前致谢。
您快到了,但是您错过了一些细节:
首先,起点很糟糕-JavaScript正则表达式很丑陋。 代替
/.*(?=.{6,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
用这个:
/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$/
然后,要将正则表达式转换为Java,您需要删除定界符(并使用引号,而不是像您一样另外使用)并加倍反斜杠(就像您已经做过的那样):
Pattern pattern = Pattern.compile("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).{6,}$");
现在应该可以了。
在Java中,您不需要/
。 它实际上会匹配一个斜杠。 另外,前导.*
是没有用的(尽管它不会影响结果)。
Pattern pattern = Pattern.compile("(?=.{6,})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.