Go strings: проверка имени файла и расширения перед загрузкой
Проверка имени перед загрузкой
Когда множество людей одновременно загружают файлы в общую систему, беспорядок в именах быстро становится настоящей проблемой: пробелы в начале или конце имени ломают сортировку, двойные точки сбивают с толку парсеры расширений, а неожиданные форматы файлов засоряют хранилище тем, чего там быть не должно. Чтобы этого не допустить, ещё до фактической передачи данных имя каждого файла проходит формальную проверку — быструю и не требующую обращения к диску или сети.
Правила проверки просты и немногочисленны. Имя не должно начинаться или заканчиваться пробелом, не должно содержать пробел или двойную точку внутри, а расширение обязано входить в заранее разрешённый список. Именно в таком порядке нарушения и рассматриваются: как только обнаруживается первое из них, дальнейший разбор прекращается и пользователь получает сообщение о конкретной причине отказа.
Задача программы — принять строку с именем файла и вынести однозначный вердикт: либо указать на первое нарушенное правило, либо подтвердить, что имя составлено верно и файл можно передавать дальше.
Что нужно сделать
Реализуйте функцию 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.
Пример
- Ввод
["report.csv"]
- Вывод
"ok"
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Go strings.Split и strconv.ParseFloat: сумма чисел в строке
- Go fmt.Sprintf: форматирование строки и числа с двумя знаками
- Go encoding/json: фильтрация потока JSON по полю alert
- Go []rune: разворот строки UTF-8 без порчи кириллицы
- Go if и switch: несколько значений в одной ветке
- Go pointer receiver и встраивание struct: изменяемый счётчик
