Я предполагаю, что вы имеете в виду буквенно-цифровую, по крайней мере одну букву и длину от 4 до 8 символов.
Попробуйте это:
(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}
(?=
- мы используем lookahead , поэтому мы можем что-то проверить, не влияя на остальную часть матча
.*[a-zA-Z]
- соответствует чему-либо, за которым следует буква, т.е. проверьте, что у нас есть хотя бы одна буква
[a-zA-Z0-9]{4,8}
- соответствует букве или цифре от 4 до 8 раз.
Однако вы говорите, что намерение заключается в том, что «это не могут быть только все цифры или только все буквы», но требования 1, 2 и 3 не достигают этого, поскольку это могут быть все буквы и отвечать всем трем требованиям. Возможно, вы захотите это, с дополнительным вниманием, чтобы подтвердить, что есть хотя бы одна цифра:
(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{4,8}
Использование a-zA-Z
не очень удобно для международного сообщества, поэтому вам лучше использовать escape-код для "письма", если он доступен в вашем аромате регулярных выражений.
Кроме того, я надеюсь, что это не подходит для приемлемых паролей, поскольку 4 символа, вероятно, недостаточно длинны.