解码/匹配正则表达式

时间:2014-03-04 12:29:39

标签: regex

请帮我解码这个正则表达式,我是这个主题的新手并且在尝试分析哪些是有效输入时完全丢失了。

我们正在研究现有的应用程序,其中此模式用于密码验证。在分析代码时,我很难确定该字段的有效输入。 它的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}$

非常感谢!

3 个答案:

答案 0 :(得分:0)

这个正则表达式将测试一个长度为15个字符的字符串,它至少包含:

  • 2个小写字母:(?=(?:[a-zA-Z0-9@&*~!#$%]*[a-z]){2})
  • 2个大写字母:(?=(?:[a-zA-Z0-9@&*~!#$%]*[A-Z]){2})
  • @&*~!#$%字符中的2个:(?=(?:[a-zA-Z0-9@&*~!#$%]*[@&*~!#$%]){2})
  • 2位:(?=(?:[a-zA-Z0-9@&*~!#$%]*\d){2})

它应该减少为:

^(?=(?:.*[a-z]){2})(?=(?:.*[A-Z]){2})(?=(?:.*[@&*~!#$%]){2})(?=(?:.*\d){2})[a-zA-Z0-9@&*~!#$%]{15}$

答案 1 :(得分:0)

所以你的正则表达式是:

^                                             # 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

继续添加换行符,缩进和评论,您就可以全面了解该模式。