2014-11-08 52 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"; 
    }  
} 

工程與上述所有的實施例。