2017-09-01 94 views
2

Regex的密碼驗證我有密碼驗證的規則如下:爲組規則

  • 至少8個字符
  • 至少1個大寫字母
  • 至少3小寫字母
  • 至少1號
  • 至少1個特殊字符
  • 起始字符必須是字母(大寫或小寫)
  • 行中最多2個相同的字符 (例如Passs123!應該是無效的,但sPass123!有效)

我試圖找到正則表達式這個規則,最接近的是這樣的:

/^(?=.*[0-9]) (?=.*[[email protected]#$%^&*]) (?=.*[a-z]) (?=.*[A-Z]) {8} $/ 

,但它並不適用於所有的規則工作。

我是新來的正則表達式,我也很欣賞任何資源,我可以學習正則表達式。

回答

3

您可以考慮以下幾種模式:

^(?=.*[0-9])(?=.*[^\w\s])(?=(?:[^a-z]*[a-z]){3})(?=.*[A-Z])(?!.*(.)\1{2})[a-zA-Z].{7,}$ 

regex demo(注意\n加入到[^a-z]僅用於測試演示目的,以免在一個多輸入跨行溢出)。

詳細

  • ^ - 字符串的開始
  • (?=.*[0-9]) - 1位數
  • (?=.*[^\w\s]) - 任何1個特殊字符(不發一言,也沒有空格字符)(注:如果你只是想從列表中請求特殊字符,使用原始模式中的(?=.*[[email protected]#$%^&*])
  • (?=(?:[^a-z]*[a-z]){3}) - 3個小寫字母
  • (?=.*[A-Z]) - 1個大寫字母
  • (?!.*(.)\1{2}) - 不相同的3個連續字符
  • [a-zA-Z] - 第一字符是字母
  • .{7,} - 然後7+字符
  • $ - 串的端

要了解有關密碼驗證的更多信息,請參閱Lookahead Example: Simple Password Validation

請注意,您可以通過使用principle of contrast增強向前看符號檢查:用(?=[^0-9]*[0-9])取代(?=.*[0-9])(?=.*[A-Z])(?=[^A-Z]*[A-Z])(?=.*[^\w\s])(?=[\w\s]*[^\w\s])

+0

條件'3小寫字母'不起作用。 'PASS123! '匹配正則表達式。 – ikleschenkov

+0

@ikleschenkov它的工作原理,僅在因爲'[^ a-z]'構造也符合換行符而在演示中不起作用。這裏是一個更合適的鏈接 - https://regex101.com/r/g4gptV/2,其中'[^ a-z]'變成'[^ \ na-z]'只是因爲演示包含單個多元化字符串。在真實情況下,這些行是獨立的字符串。 –

+0

@WiktorStribiżew我從你的解決方案中學到了很多東西。 +1總是很好地解釋它:-) – Gurman