Если вы берете строковый путь у пользователя (например, читая .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= '_'