我该如何构造这个正则表达式

时间:2014-02-13 15:14:51

标签: regex passwords

好吧,必须为密码做正则表达式。

密码应为5 UPPERCASE和3 NUMBERS(可以任意顺序)和总共8(5 + 3)

我试试这个

^(.*?(A-Z){5})(.*\d){3}

但不能以任何顺序工作。

希望你们能帮助我。

3 个答案:

答案 0 :(得分:0)

你很接近,试试这个:

^(?=(?:.*[A-Z]){5})(?=(?:.*\d){3})[A-Z0-9]{8}$

答案 1 :(得分:0)

试试这个:

^(?=(.*[A-Z]){5})(?=(.*\d){3}).{8}$

Regular expression visualization

Debuggex Demo

说明:

  • ^从字符串的开头
  • 开始
  • (?=...)期待,但不要“前进”
  • (?:.*[A-Z]){5}仅当字符串包含5个大写字母时才匹配。 (?:表示“不捕获此组; .*表示”允许字母之间的字符。“
  • (?=...)期待,但不要“前进”
  • (?:.*\d){3}仅当字符串包含3位数时才匹配。 (?:表示“不捕获此组; .*表示”允许数字之间的字符。“
  • .{8}恰好匹配8个字符
  • $匹配字符串的结尾

示例:

  • 件:
    • 是abcde123
    • A1J4KLZ8
    • 1ABCDE23
  • 非比赛
    • ABCDEF12(字母太多)
    • ABCD1234(数字太多)
    • ABCDE1234(字符过多)

答案 2 :(得分:0)

要求这些东西用于密码不是一件好事,因此你不需要那个正则表达式。

如果查看所有可能的8个字符密码,这些密码远远超过所有可能的8char 5upercaseletters 3digits密码。

因此,如果攻击者知道您的要求(可能是文件而不是秘密),他可以比没有这些要求更快地强制输入密码 - 因为他的密码候选人少了。

8个没有限制的字符(数字,上限,下限,额外)=(10 + 26 + 26 + x)^ 8种可能性

计算自己有多少可能的密码。 :d