Задача курса

Go strings: проверка имени файла и расширения перед загрузкой

Курс «Golang с нуля» · урок «Пакеты strings и strconv: поиск, разбивка, замена и преобразование типов»

Условие

Проверка имени перед загрузкой

Когда множество людей одновременно загружают файлы в общую систему, беспорядок в именах быстро становится настоящей проблемой: пробелы в начале или конце имени ломают сортировку, двойные точки сбивают с толку парсеры расширений, а неожиданные форматы файлов засоряют хранилище тем, чего там быть не должно. Чтобы этого не допустить, ещё до фактической передачи данных имя каждого файла проходит формальную проверку — быструю и не требующую обращения к диску или сети.

Правила проверки просты и немногочисленны. Имя не должно начинаться или заканчиваться пробелом, не должно содержать пробел или двойную точку внутри, а расширение обязано входить в заранее разрешённый список. Именно в таком порядке нарушения и рассматриваются: как только обнаруживается первое из них, дальнейший разбор прекращается и пользователь получает сообщение о конкретной причине отказа.

Задача программы — принять строку с именем файла и вынести однозначный вердикт: либо указать на первое нарушенное правило, либо подтвердить, что имя составлено верно и файл можно передавать дальше.

Что нужно сделать

Реализуйте функцию CheckUploadName(name string) string. Верните первое найденное нарушение в таком порядке: edge space, если strings.TrimSpace(name) != name; inner space, если имя содержит обычный пробел; double dot, если имя содержит ..; extension, если имя не заканчивается на .txt, .csv или .json. Если нарушений нет, верните ok. Расширения сравниваются с учётом регистра.

Ввод и вывод

Функция получает одну строку с именем и возвращает одну из строк edge space, inner space, double dot, extension или ok. Читать stdin и обращаться к файловой системе не нужно.

Пример

CheckUploadName("report..csv") возвращает double dot, а CheckUploadName("report.csv") — ok.

Примеры

Пример 1

Ввод
["report.csv"]
Ожидаемый результат
"ok"

Попробуйте решить

РешениеGo
Без регистрации · результат не сохраняется