Q1: Это RegEx не соответствует моему требованию? Q2: Как это исправить?
Нет, это не соответствует вашим требованиям, но ваше SOO близко. Добавьте пару звездочек после точек, и вы получите золотой цвет. Вот правильное регулярное выражение (https://regex101.com/r/grOsJC/1):
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%?&])[A-Za-z\d$@$!%?&]{8,}$
Проблема, с которой вы столкнулись, заключалась в том, что ваши позитивные взгляды только утверждали второй символ, а не исследуя всю строку. Кроме того, ваш пример пароля содержит запятую, которая не является допустимым символом в регулярном выражении, поэтому он никогда не совпадет.
В3: Есть ли другой способ выполнить это требование?
Вы можете разделить регулярное выражение на несколько шагов или проходов в одной строке вместо того, чтобы смешивать все это в одном выражении. Но я думаю, что это регулярное выражение вполне понятно.