Хорошо, тогда это может не быть симпатичным , но, похоже, делает свою работу:
^(?!.*(.)\1\1)(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[.\-!?§$%&]).{8,}.*$
Вы можете увидеть рабочую демонстрацию здесь .
Сайт, на который я ссылался выше, дает хорошие объяснения по поводу регулярных выражений.Пожалуйста, постарайтесь хотя бы понять, что здесь происходит, чтобы вы могли обнаружить ошибки, возникающие при использовании такого уродливого RegEx (и поэтому SO становится не сайтом службы кодирования, а местом, где можно учиться).
Обратите внимание, что «специальные символы» в этом примере .-!?§$%&
.Если вы хотите, чтобы там были другие, добавьте их туда, где они есть в шаблоне.И не забудьте экранировать -
с \
в классах символов, так как они имеют здесь особое значение.Как в этой части: .\-!?§$%&
.