Вы можете попробовать это:
^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[A-Za-z\d@$!%*#?&]{6,}$
Как показано здесь: https://regex101.com/r/GAkedL/1
Объяснение -
Здесь мы сопоставляем каждое условие отдельно, потому что в вашем коде первое предположение подразумевает «за которым следует либо строчная или прописная буква».
(?=.*?[a-z])
сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует строчная буква
(?=.*?[A-Z])
сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует заглавная буква
(?=.*?\d)
сообщает регулярному выражению, что пароль должен содержать 0 или более символов, за которыми следует цифра
Обратите внимание на добавление ?
после .*
в каждом прогнозе. Это подразумевает, что регулярное выражение должно соответствовать как можно меньшему числу символов, прежде чем будет найдена необходимая буква или цифра, что более эффективно.