2014-11-04 73 views
0

我試圖檢查一個用戶在PHP網站上工作時插入的密碼。 我的支票要:正則表達式 - 避免重複相同字母的序列

  • 至少8個字符
  • 最多20個字符
  • 接受字母,數字,像(點)+ $常見的特殊字符 - _!

直到此時我已經能夠找出合適的表情,但現在我要添加其他規則,其中一個用戶不能寫字母多於1次的順序相同。

假設,不考慮同一字母的兩次重複,如果用戶寫相同的字符串(等於或大於3個字符),曾多次,它應該匹配。

例如:

  • ABCDE 無效 - 應至少爲8個字符
  • abcde1234 有效
  • abcd1abcd1 無效由於串的重複ABCD1
(更新後):(
  • ABABABAB 無效 - 字符串 「AB」 是repited 2次以上
  • AAAAAAAA 無效 - 字符串AAA是repited,曾多次
  • 的HelloWorld 有效 - 即使有字母「l」重複兩次

有沒有什麼建議?
我不知道是否可以寫下正確的RegExp,也許我正在嘗試做一些不可能的事情。
在離開這個想法之前,我很想查看在RegExp中知道更多的人的意見。
在此先感謝

+0

有多少個字符不應該成爲序列的一部分? – Braj 2014-11-04 11:56:28

+0

你到目前爲止有什麼?這個「不重複」的規則也有多深? (例如。將'abcde1fbcde2' - 重複'bcde'被允許)怎麼樣'abababab'或'aaaaaaaa' – Richard 2014-11-04 12:01:52

+0

...? – Braj 2014-11-04 12:03:16

回答

1
^(?!.*?(.+)\1)([\[email protected]+$!.-]+){8,20}$ 

似乎運作良好:再次東西,那麼一些字符串,然後是串:http://regex101.com/r/cU9lD0/1

棘手的部分是^(?!.*?(.+)\1)讀取「輸入的開始,而不是跟着當」。

這就是說,所有「密碼驗證」是一個相當毫無意義的企業,實際上阻止人們使用really good passwords