Немного поздно, так что это всего лишь наблюдение.
Это взлет по методу @Tim Pietzcker.
Хотя слова могут быть любыми, если вы хотите потребовать не менее
3 слова имеют [a-zA-Z0-9] {2,40} символы вложенные, вы можете это сделать.
^ # String start
(?=.*[@#$%^&+=]) # Assert 1 special char
(?=.*\d) # Assert 1 digit
(?: # Special 'Word Group' -- Need 2 words
.* # Any char, 0 or more times
[a-zA-Z0-9]{2,40} # Alpha/num char, 2 to 40 times
.* # Any char, 0 or more times
\s # a whitespace, only 1 required
){2} # 'Word Group' end, do 2 times
.* # Any char, 0 or more times
[a-zA-Z0-9]{2,40} # Alpha/num char, 2 to 40 times -- Need 1 word
Это должно соответствовать по крайней мере 3 специальных [A-Za-z0-9] {2,40} слов, разделенных по меньшей мере, 1
пространства включая цифры и особый характер.
обновление
Да, вы можете объединить их в одну группу сделали {3} раз в 2 способами я знаю.
Использование буфера захвата в качестве флага
^(?=.*[@#$%^&+=])(?=.*\d)(?:(?:(?!\1)|\s).*[a-zA-Z0-9]{2,40}().*){3}
^ ^
---------------------------------------
^ # String start
(?=.*[@#$%^&+=]) # Assert 1 special char
(?=.*\d) # Assert 1 digit
(?: # Special 'Word Group'
(?: #.. grping start ....
(?!\1) # Either capt group 1 is UN-DEFINED
| \s # OR, require a whitespace
) #.. grping end ....
.* # Any char, 0 or more times
[a-zA-Z0-9]{2,40} # Alpha/num char, 2 to 40 times
() # DEFINE Capture group 1
.* # Any char, 0 or more times
){3} # 'Word Group' end, do 3 times
Или, с помощью условного
^(?=.*[@#$%^&+=])(?=.*\d)(?:(?(1)\s).*([a-zA-Z0-9]{2,40}).*){3}
^ ^
---------------------------------------
^ # String start
(?=.*[@#$%^&+=]) # Assert 1 special char
(?=.*\d) # Assert 1 digit
(?: # Special 'Word Group'
(?(1)\s) # Conditional, require a whitespace if capture group 1 captured anything
.* # Any char, 0 or more times
([a-zA-Z0-9]{2,40}) # Capture group 1, Alpha/num char, 2 to 40 times
.* # Any char, 0 or more times
){3} # 'Word Group' end, do 3 times
Я хотел бы заменить ваше последнее требование с минимальной длиной. Одно из преимуществ кодовых фраз заключается в том, что они устраняют необходимость помнить кучу сумасшедших номеров и специальных символов, но сохраняют высокий уровень изменчивости, потому что они очень длинные. –
Это правда, но, оставляя вне себя специальные символы, выходит из фразы, уязвимой для атак с использованием статистического анализа при использовании слов, особенно потому, что люди склонны использовать ограниченный набор слов. Добавление по крайней мере одного специального символа улучшает энтропию. – jmm312