Если я правильно понимаю, правила можно перефразировать так:
- Ввод должен состоять только из буквенно-цифровых символов
- Отклонить любой ввод, который состоит только из цифр
- Отклонить любой ввод, который состоит только из строчных букв
- Отклонить любой ввод, который состоит только из заглавных букв
Ваше регулярное выражение не проверяет начало / конец ввода и не проверяет, что все символы являются буквенно-цифровыми (.*
слишком широк), поэтому оно будет принимать недопустимые вводы.
Вы можете сделать это так:
^(?!\d*$|[A-Z]*$|[a-z]*$)[a-zA-Z\d]*$