This regex works - see test data and output below:
^(?=.{4,})(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?!.* )(?=.*[@#$%^&+=i.,!?:;*/])
Test data in passwords.txt (only the first should pass):
aB#1
aB #1
ab#1
AB#1
aB#a
aB1a
aB1
mac-osx> grep -P '^(?=.{4,})(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?!.* )(?=.*[@#$%^&+=i.,!?:;*/])' passwords.txt
aB#1
You can add whatever extra "special characters" you need into the last look ahead regex's character class.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…