Для положительного взгляда (?=.*\d)
требуется ди git в строке И (?=.*[^a-zA-Z0-9])
требуется символ, отличный от буквы ASCII или ди git.
Для того, чтобы регулярное выражение требовало ди git ИЛИ символ, отличающийся от буквы ASCII или di git, объедините два вида поиска как
(?=.*[^A-Za-z])
В основном вам нужно удалить 0-9
из второго взгляда, и для этого потребуется любой символ, кроме ASCII письмо.
Результат:
/^(?=.*[^A-Za-z])(?=.*[a-z])(?=.*[A-Z]).{8,20}$/
Или более эффективная версия, основанная на принципе контрастности :
/^(?=[A-Za-z]*[^A-Za-z])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,20}$/
См. regex demo .
Если пробел не особенный, добавьте его в поле зрения:
/^(?=[A-Za-z ]*[^A-Za-z ])(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]).{8,20}$/
^ ^