Что такое регулярное выражение (JavaScript), которое я должен использовать, чтобы убедиться, что строка является допустимым именем файла? - PullRequest
1 голос
/ 25 сентября 2008

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

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

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

Ответы [ 4 ]

3 голосов
/ 25 сентября 2008

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

1 голос
/ 29 сентября 2008

И я бы порекомендовал простую комбинацию 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);
1 голос
/ 26 сентября 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= '_'
0 голосов
/ 25 сентября 2008

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

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

...