Вы можете сделать это, используя отрицательные прогнозные утверждения как:
^(?!(?:net|com|org|edu)$)(?!.*[A-Z])[a-z]{3,10}$
Посмотреть
Пояснение:
^ - Start anchor
$ - End anchor
(?:net|com|org|edu) - Alternation, matches net or com or org or edu
(?!regex) - Negative lookahead.
Matches only if the string does not match the regex.
Таким образом, часть (?!(?:net|com|org|edu)$)
гарантирует, что входные данные не являются одним из доменов верхнего уровня.
Деталь (?!.*[A-Z])
гарантирует, что на входе нет заглавной буквы.
Деталь [a-z]{3,10}$
обеспечивает длину ввода не менее 3 и не более 10.