Como validar o nome de domínio em PHP?

É possível sem usar expressão regular?

Por exemplo, quero verificar se uma string é um domínio válido:

domain-name
abcd
example

São domínios válidos. Estes são inválidos, claro:

domaia@name
ab$%cd

E assim por diante. Então, basicamente, deve começar com um caractere alfanumérico, então pode haver mais caracteres alnum e também um hífen. E deve terminar com um caractere alnum também.

Se não for possível, você poderia me sugerir um padrão regular para fazer isso?

EDITAR:

Por que isso não funciona? Estou usando preg_match incorretamente?

$domain = '@djkal';
$regexp = '/^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/';
if (false === preg_match($regexp, $domain)) {
    throw new Exception('Domain invalid');
}

questionAnswers(17)

yourAnswerToTheQuestion