请帮我解码这个正则表达式,我是这个主题的新手并且在尝试分析哪些是有效输入时完全丢失了。
我们正在研究现有的应用程序,其中此模式用于密码验证。在分析代码时,我很难确定该字段的有效输入。 它的java应用程序。
^(?=(?:[a-zA-Z0-9@&*~!#$%]*[a-z]){2})(?=(?:[a-zA-Z0-9@&*~!#$%]*[A-Z]){2})(?=(?:[a-zA-Z0-9@&*~!#$%]*[@&*~!#$%]){2})(?=(?:[a-zA-Z0-9@&*~!#$%]*\d){2})[a-zA-Z0-9@&*~!#$%]{15}$
非常感谢!
答案 0 :(得分:0)
这个正则表达式将测试一个长度为15个字符的字符串,它至少包含:
(?=(?:[a-zA-Z0-9@&*~!#$%]*[a-z]){2})
(?=(?:[a-zA-Z0-9@&*~!#$%]*[A-Z]){2})
@&*~!#$%
字符中的2个:(?=(?:[a-zA-Z0-9@&*~!#$%]*[@&*~!#$%]){2})
(?=(?:[a-zA-Z0-9@&*~!#$%]*\d){2})
它应该减少为:
^(?=(?:.*[a-z]){2})(?=(?:.*[A-Z]){2})(?=(?:.*[@&*~!#$%]){2})(?=(?:.*\d){2})[a-zA-Z0-9@&*~!#$%]{15}$
答案 1 :(得分:0)
[a-zA-Z0-9@&*~!#$%]
是定义允许字符集的character class
以(?=
开头的群组为positive lookaround assertions,它们确保了某种条件。
所以你的正则表达式是:
^ # Matches the start of the string
(?=(?:[a-zA-Z0-9@&*~!#$%]*[a-z]){2}) # ensures two lowercase letters somewhere in the whole string
(?=(?:[a-zA-Z0-9@&*~!#$%]*[A-Z]){2}) # ensures two uppercase letters somewhere in the whole string
(?=(?:[a-zA-Z0-9@&*~!#$%]*[@&*~!#$%]){2}) # ensures two characters out of [@&*~!#$%] somewhere in the whole string
(?=(?:[a-zA-Z0-9@&*~!#$%]*\d){2}) # ensure two digits somewhere in the whole string
[a-zA-Z0-9@&*~!#$%]{15} # Matches exactly 15 character out of the set
$ # Matches the end of the string
答案 2 :(得分:0)
首先,拍摄谁写的这个。
其次,最好的方法是添加换行符和注释,将正则表达式分解为更小的部分。
^ // start of string
(?= // lookaround assertion
(?: // non-capturing group
[a-zA-Z0-9@&*~!#$%]*[a-z]
)
{2}
)
(?= // lookaround assertion
(?: // non-capturing group
[a-zA-Z0-9@&*~!#$%]*[A-Z]
)
{2} // exactly twice
)
<snip...>
$ // end of string
继续添加换行符,缩进和评论,您就可以全面了解该模式。