Платформа.NET « Проверка/валидация имени файла в C#
1 ответов
Вместо регекспов можно использовать «родные» методы, например:
string fileName = @"Definetly_)(*&&^%$$##@!wrong_<>?":]][[*_filename.txt";
string validFileName = fileName .Trim(Path.GetInvalidFileNameChars());
Также, существует
Path.GetInvalidPathChars()
соответственно для папок.
вот такая проверка is a MUST а дальше по усмотрению
if (fileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
return false;
}
Можно использовать регулярные выражения
http://regexplib.com подсказал такие варианты:
Корректное имя файла (используйте проверку независимую от регистра)
^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$
Имя файла с путем (как сетевым так и локальным)
^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$
Упрощенная проверка (работает только с именем файла и не учитывает путь)
^([a-zA-Z]:\\)?[^\x00-\x1F"<>\|:\*\?/]+\.[a-zA-Z]{3,4}$
=================
http://blog.dvteam.ru