Regex для проверки имени файла и относительного пути без навигации вверх (.. \) в Windows - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь проверить, что имя файла и путь, введенные пользователем, структурно корректны в C # GUI.Мне не нужно проверять, существует ли файл, просто имя является допустимым именем файла Windows, а путь является допустимым относительным путем к текущему рабочему каталогу.Абсолютные пути должны быть явно запрещены.Regex никогда не был моей вещью.

Допустимые входные данные:
"myfiles \ mydocument.pdf"
"Another_folder \ an0th3r_fi1e.fake"
". \ Folder \ file.docx" (текущее обозначение каталога)

Отклоненные входные данные будут: "C: \ что угодно"
"внутренняя папка \ files ?? *> \ myfile.pdf"
"folder \ file" (пробел в началеили конец)
".... \ папка, расположенная в другом месте \ file.txt" (навигация вверх)

Спасибо за любую помощь!

В качестве подробного руководства: MSDN«Именование файлов, путей и пространств имен»

1 Ответ

0 голосов
/ 15 октября 2010

Попробуйте это:

@"(\.\\)?([a-zA-Z0-9_-]+[.a-zA-Z0-9_-]*\\)*[a-zA-Z0-9_-]+[.a-zA-Z0-9_-]*"

Обратите внимание, что это уязвимо для атаки DDOS .

...