if(password.matches("(?=.*[0-9].*[0-9])(\\w{8,})") )
System.out.println("Valid Password");
else
System.out.println("Invalid Password");
我正在检查密码以确保其长度至少为8个字符,可以是字母或数字,且必须至少有2位数字。这似乎对我有用,但我只想确认我做得对。此外,我一直在努力研究并弄清楚每件作品究竟在做什么。以下是我相信每件作品,但如果我不正确,请你解释具体部分的实际作用。感谢
?=告诉程序记住是否找到了我要找的数字[0-9]?
。*表示任意数量的[0-9]?
[0-9]指定0-9之间的任何数字。
。* [0-9]然后正则表达式寻找0-9的另一个数字?
(\\ w {8,})查找任何字母(大写或小写)和数字,最小长度为8个字符?
答案 0 :(得分:0)
?= is a positive look ahead, That means that it is searching for something ahead of it.
http://www.regular-expressions.info/lookaround.html
有关前瞻的更多信息。
非常适合测试任何正则表达式。
答案 1 :(得分:0)
正则表达式有两个主要部分:
(?=.*[0-9].*[0-9])
(\\w{8,})
第1部分是积极展望,其形式为(?=pattern)
。 “看看周围”(正面/负面看后面/前面)断言,而不消耗(或捕获)相邻输入匹配某个模式。在这种情况下,它断言当前点之后的输入包含(至少)2个数字(.*
表示0-n个字符,[0-9]
表示任何数字字符)。顺便提一下,它可以更简洁地表达为(?=(.*[0-9]){2}
第2部分表示“至少8个单词字符” - 单词字符是任何字母,任何数字或下划线。它周围的括号(不必要地)将8个以上的单词字符捕获为组1