如何从Javascript中的任意字符串生成有效的文件名?

时间:2016-02-19 17:33:06

标签: javascript parsing compatibility

有没有办法在Javascript中将任意字符串转换为有效的文件名?

结果应尽可能贴近原始字符串,以方便人类阅读(因此slugify不是一种选择)。这意味着它只需要替换are not supported by an OS

的字符

例如:

'Article: "Un éléphant à l\'orée du bois/An elephant at the edge of the woods".txt'
→ 'Article   Un éléphant à l\'orée du bois An elephant at the edge of the woods .txt'

我认为这是一个常见的问题,但我没有找到任何解决方案。我希望你能帮助我!

3 个答案:

答案 0 :(得分:1)

使用字符串替换功能

var str = 'Article: "Un éléphant à l'orée du bois/An elephant at the edge of the woods".txt';
var out=(str.replace(/[ &\/\\#,+()$~%.'":*?<>{}]/g, ""));

或期望数字和字母

var out=(str.replace(/[^a-zA-Z0-9]/g, ''));

答案 1 :(得分:0)

当您为变量赋值时,使用单引号',如果您的字符串中有另一个',则字符串将会中断。在声明字符串时,需要在单引号内添加反斜杠\。

但是,如果您使用的字符串来自某个地方,那么您不需要添加反斜杠,因为它可能在其他地方处理得很好。

请注意/ \:*? “&lt;&gt; |不允许使用文件名。

因此,如果已在变量中设置了值,则需要删除所有这些字符。这样做

    var str = 'Article: "Un éléphant à l\'orée du bois/An elephant at the edge of the woods".txt';
    str = str.replace(/[\/\\:*?"<>]/g, ""));

答案 2 :(得分:0)

非常感谢Kelvin's回答!

我很快将它编译成一个函数。我使用的最终代码是:

function convertToValidFilename(string) {
    return (string.replace(/[\/|\\:*?"<>]/g, " "));
}

var string = 'Un éléphant à l\'orée du bois/An elephant at the edge of the woods".txt';

console.log("Before = ", string);
console.log("After  = ", convertToValidFilename(string));

这导致输出:

Before =  Un éléphant à l'orée du bois/An elephant at the edge of the woods".txt
After  =  Un éléphant à l orée du bois An elephant at the edge of the woods .txt