You could check that it is:
- not purely numbers and alphanumerics (this is slightly more aggressive than your conditions say);
- not purely lowercase and special characters
A single regular expression to check this would be something like
(?![A-Za-z0-9]+$|[a-z{},.<>;:'?/|`~!@#$%^&*()_-+= -]+$).{8,}
I intentionally ignored your exact specification. In particular, I did not want to allow Pass1234
, and I don't think it makes sense to set a maximum length, and I did not restrict the set of allowed characters at all (i.e. there are minimum requirements, but you can go wild and use control characters or accented characters if you like). These things are easy enough to fix if you disagree.
To strictly implement your spec, you could check that the password does not consist of purely any two groups; so not all upper and lower case, and not all lowercase and numbers, and not all uppercase and numbers, and not all numbers and specials, and not all lowercase and specials, and not all uppercase and specials, but again, this is somewhat tedious and IMHO counter-productive.
You are not saying which regex flavor you are using. I have assumed you have the Perl negative lookahead (?!...)
at your disposal. This is significantly harder if you are restricted to traditional BRE or ERE syntax.