Ответ 1
Регулярное выражение:
^(?=.{8,20}$)(([a-z0-9])\2?(?!\2))+$
Первый lookahead ((?=.{8,20}$)
) проверяет длину вашей строки. Вторая часть проверяет ваш двойной символ и проверку достоверности:
(
([a-z0-9]) Matching a character and storing it in a back reference.
\2? Optionally match one more EXACT COPY of that character.
(?!\2) Make sure the upcoming character is NOT the same character.
)+ Do this ad nauseum.
$ End of string.
Хорошо. Я вижу, вы добавили некоторые дополнительные требования. Мой основной форум по-прежнему работает, но мы должны дать вам более пошаговый подход. SO:
^...$
Все ваши регулярные выражения будут опущены в начальный и конечный символы по понятным причинам.
(?=.{n,m}$)
Проверка длины. Поместите это в начало вашего регулярного выражения с n как минимальной длиной и m как максимальная длина.
(?=(?:[^REQ]*[REQ]){n,m})
Обязательные символы. Поместите это в начале вашего регулярного выражения с REQ как ваш обязательный символ, чтобы требовать от N до M вашего персонажа. Вы можете отказаться от (?: ..){n,m}
, чтобы потребовать только один из этих символов.
(?:([VALID])\1?(?!\1))+
Остальное выражение. Замените VALID на действительные символы. Итак, ваше регулярное выражение пароля:
^(?=.{8,20}$)(?=[^A-Za-z]*[A-Za-z])(?=[^0-9]*[0-9])(?:([\w\d*?!:;])\1?(?!\1))+$
'Splained:
^
(?=.{8,20}$) 8 to 20 characters
(?=[^A-Za-z]*[A-Za-z]) At least one Alpha
(?=[^0-9]*[0-9]) At least one Numeric
(?:([\w\d*?!:;])\1?(?!\1))+ Valid Characters, not repeated thrice.
$
http://regexr.com?34vol Здесь новый в действии.