Вы можете использовать это регулярное выражение,
^[a-zA-Z0-9](?:[\w.-]{0,48}[a-zA-Z0-9])?$
Пояснение:
^
- соответствует началу строки
[a-zA-Z0-9]
- начинается сопоставление с алфавитом или цифрой
(?:
- начало шаблона не группирования
[\w.-]{0,48}[a-zA-Z0-9]
- Следующие совпадения могут быть алфавитами, цифрами, точками, подчеркиванием и дефисом, но последним символом должен быть алфавит или цифра
)?
- Шаблон без группы закрыт, и ?
делает его необязательным, чтобы разрешить использование только одного символа в качестве допустимой переменной
$
- конец строки
Regex Demo (Для упрощения демонстрации с помощью струн я уменьшил условие длины до 1-5 вместо 1-50, как было задано в вопросе)