2014-11-08 54 views
0

我试图找出一个正则表达式模式,将执行以下操作:正则表达式,用于验证passwith允许特定的特殊字符

  • 在任何位置
  • 至少需要1个小至少需要1个大写字母性格在任何位置
  • 至少需要1位中的任何位置
  • 允许在任何位置(但不要求)的特殊字符!$ &

任何帮助,将不胜感激

例子,应该工作:

  • PASSW0RD
  • Passw0rd1
  • 传递w20rd

例子,不应该工作:

  • PASSW @ ord24
  • 密码
  • PASSW @ RD24
  • 密码
+0

下划线还允许吗? – Nemesis 2014-11-08 14:53:28

+0

嘿同胞triangler - 如果你能给出一个可以工作的密码和一个会失败的密码的例子,那会很好。还有你正在使用的任何特定语言? – Anthony 2014-11-08 14:59:22

+0

其实它是一个动态字段,允许特殊字符可以预定义,所以可以。我更多地寻找写出模式的正确方法。我其实已经拿到了第一个,所需的领域,这些都相当简单。我很难让所允许的角色在不需要他们的情况下工作。 – RustedBucket 2014-11-08 15:00:32

回答

0

这一个应该工作:

^(?=[a-zA-Z0-9!$&]*\d)(?=[a-zA-Z0-9!&$]*[a-z])(?=[a-zA-Z0-9!&$]*[A-Z])[a-zA-Z0-9!&$]+$ 

您还可以更改+到范围{4,}{4,50}防止太小密码和/或过大的密码。

+0

林接受这个答案,因为它似乎正是我想要的。感谢每个人的反馈。 – RustedBucket 2014-11-08 18:30:29

0

最简单的办法是像(有点幼稚,但应该工作,也许有更有效的方法):

([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)| 
([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)| 
([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)| 
([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-0]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)| 
([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)| 
([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*) 

当然,它必须根据您使用的语言调整为语言语法正则表达式。 在Java:

String regex = "([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|" 
     + "([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|" 
     + "([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|" 
     + "([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-0]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|" 
     + "([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)|" 
     + "([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)"; 

    String[] passList = new String[] { "Passw0rd", "!Passw0rd1", "Pass!w20rd", "[email protected]", "password", 
     "[email protected]", "Password" }; 
    for (String pass : passList) 
    { 
     System.out.print(pass + ": " + pass.matches(regex)+", "); 
    } 

输出:

Passw0rd: true, !Passw0rd1: true, Pass!w20rd: true, [email protected]: false, password: false, [email protected]: false, Password: false 
0

如果多于一个表达式是allowey,可以使用像(在perl语法):

if ($pw =~ /[^a-zA-Z0-9!\$&]/) { 
    print "Usage of not allow characters.\n"; 
} else { 
    if ($pw =~ /[a-z]/ && $pw =~ /[A-Z]/ && $pw =~ /\d/) { 
     print "okay\n"; 
    } else { 
     print "not okay\n"; 
    }  
} 

工程与上述所有的实施例。