2009-10-13 164 views
107

什麼是正則表達式,以確保給定的字符串至少包含以下每個類別中的一個字符。正則表達式確保字符串至少包含一個小寫字母,大寫字母,數字和符號

  • 小寫字符
  • 大寫字符
  • 位數
  • 符號

我知道各組分別[a-z][A-Z]\d_|[^\w]模式(我讓他們正確的,沒」我呢?)。

但是,如何將它們結合起來,以確保字符串包含所有這些以任何順序?

+0

什麼平臺/正則表達式? Bart的回答是對的,但是前瞻斷言在JavaScript中不可靠,例如。 – bobince 2009-10-13 12:31:18

+0

無處不在 - 我正在學習正則表達式。有沒有可以在JavaScript中使用的替代方法? – Amarghosh 2009-10-14 08:22:44

+0

@bobince嘿,我想知道爲什麼前瞻斷言在Javascript中不可靠。有沒有關於這方面的寫作? – 2013-10-07 21:18:35

回答

250

如果你需要一個單一的正則表達式,請嘗試:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*(_|[^\w])).+$ 

的簡短解釋:

^     // the start of the string 
(?=.*[a-z])  // use positive look ahead to see if at least one lower case letter exists 
(?=.*[A-Z])  // use positive look ahead to see if at least one upper case letter exists 
(?=.*\d)   // use positive look ahead to see if at least one digit exists 
(?=.*[_\W])  // use positive look ahead to see if at least one underscore or non-word character exists 
.+     // gobble up the entire string 
$     // the end of the string 

和我一起SilentGhost同意,[_\W]可能會有點廣闊。我會用這樣的字符集替換它:[[email protected]#$%^&*.,?](隨意添加更多當然!)

+5

再次感謝Bart。我沒有意識到積極的展望。 – Amarghosh 2009-10-14 04:30:47

+0

如果我將最後一個'。+'改成'。*',會發生什麼?我無法想出一個以'。*'失敗的測試用例。它們在這方面是否一樣? 「零個或多個角色」似乎很好 - 只是尋求確認。 – Amarghosh 2009-10-14 09:49:09

+0

@Amarghosh:在這種情況下,沒有區別。由於積極的預見,字符串已經包含至少4個字符。所以把'。+'改成'。*'甚至是'。{4,}'都沒有什麼區別。 – 2009-10-14 10:03:16

4

您可以分別匹配這三個組,並確保它們都存在。另外,​​似乎有點太寬泛,但如果這是你想要的,你可能想用\W替換它。

+0

謝謝。我不知道\ W。只是看它,發現它匹配Not Word。 \ W和[\ W]之間是否有區別? [\ W]是多餘的嗎? – Amarghosh 2009-10-14 04:29:13

+0

@Amarghosh,是的,'\ W'和'[\ W]'結果相同。 – 2009-10-14 05:31:09

2

巴特基爾斯,你的正則表達式有幾個問題。最好的辦法是這樣的:

(.*[a-z].*)  // For lower cases 
(.*[A-Z].*)  // For upper cases 
(.*\d.*)   // For digits 

這樣你就可以搜索,無論是在開始,結束還是在中間。在你有我有很多麻煩複雜的密碼。

相關問題