Регулярное выражение для проверки имени файла и относительного пути без навигации вверх (..\) в Windows

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

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

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

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

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


person Robolulz    schedule 15.10.2010    source источник
comment
вам понадобится много модульных тестов для этого   -  person Gabe Moothart    schedule 15.10.2010


Ответы (1)


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

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

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

person SLaks    schedule 15.10.2010
comment
Спасибо за это! Я смотрю на это сейчас; кажется, работает для того, что мне нужно. Я ценю статью. Это было интересное чтиво. - person Robolulz; 15.10.2010