Это было бы более безопасное регулярное выражение, так как поддомен не может начинаться с дефиса:
^[a-z][a-z-]{5,19}$
Что касается имени базы данных, я считаю, что оно не может содержать дефис, поскольку оно является оператором вычитания, поэтому вашим лучшим выбором может быть либо запретить переносы, либо заменить их на подчеркивания:
$database = str_replace('-', '_', $subdomain);
РЕДАКТИРОВАТЬ : Очевидно, @nikic прав, вы можете использовать дефисы, если вы указали обратное имя базы данных.