Какое регулярное выражение (JavaScript) я должен использовать, чтобы убедиться, что строка является допустимым именем файла?

В данный момент я все еще изучаю RegEx, но может ли кто-нибудь мне помочь? У меня есть несколько особых требований к форматированию строки:

  1. Никаких каталогов. ПРОСТО имя файла.
  2. Имя файла должно быть написано строчными буквами.
  3. Пробелы необходимо заменить подчеркиванием.

Это не должно быть сложно, но у меня мало времени, и я не уверен в «правильном» способе обеспечения допустимого имени файла (а именно, я забываю, какие символы должны были быть недопустимыми для имен файлов).


person Daddy Warbox    schedule 25.09.2008    source источник


Ответы (4)


И я бы порекомендовал простую комбинацию RegExp и другого javascript:

var a = "c:\\some\\path\\to\\a\\file\\with Whitespace.TXT";
a = a.replace(/^.*[\\\/]([^\\\/]*)$/i,"$1");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);
person roenving    schedule 29.09.2008

Если вы очень торопитесь, обычно вы можете найти приемлемые регулярные выражения в библиотеке по адресу http://regexlib.com/. Отредактируйте, чтобы сказать: Вот вариант, который может сработать для вас.

person Grank    schedule 25.09.2008
comment
Лол ... обыграй меня :) Проголосовал - person Josh; 25.09.2008

Если вы берете строковый путь от пользователя (например, читаете .value поля загрузки файла), вы не можете быть уверены, что это за символ разделителя пути. Это может быть обратная косая черта (Windows), косая черта (Linux, OS X, BSD и т. Д.) Или что-то еще в старых или малоизвестных ОС. Разделение пути на прямую или обратную косую черту будет охватывать общие случаи, но рекомендуется включить возможность для пользователя переопределить имя файла в случае, если мы угадали неправильно.

Что касается «недопустимых символов», они тоже зависят от операционной системы. Вероятно, самый простой способ - заменить все не буквенно-цифровые символы заполнителем, например подчеркиванием.

Вот что я использую:

var parts= path.split('\\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'
person bobince    schedule 26.09.2008

Я бы посмотрел на библиотеку RegEx.

Вы можете выбрать любое количество предварительно сконфигурированных регулярных выражений различной степени надежности в соответствии с вашими потребностями.

person Josh    schedule 25.09.2008