javascript url-safe filename-safe string

时间:2011-12-13 06:05:59

标签: javascript regex string filenames

正在寻找一个正则表达式/替换函数来取一个用户输入的字符串,例如“John Smith的酷页面”,并返回一个文件名/ url安全字符串,如“john_smith_s_cool_page.html”,或类似的东西。

4 个答案:

答案 0 :(得分:110)

嗯,这里有一个替换任何不是字母或数字的东西,并且使它全部小写,就像你的例子一样。

var s = "John Smith's Cool Page";
var filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();

说明:

正则表达式为/[^a-z0-9]/gi。好吧,实际上最后的gi只是在使用表达式时使用的一组选项。

  • i表示"忽略大小写差异"
  • g表示" global",这实际上意味着每个匹配都应该被替换,而不仅仅是第一个。

所以我们所看到的只是[^a-z0-9]。让我们一步一步地阅读:

  • []定义了一个"字符类",这是一个单字符列表。如果您要写[one],那么这将匹配' o'或者' n'或者' e'。
  • 但是,在字符列表的开头有^。这意味着它应该只与列表中的字符匹配。
  • 最后,字符列表为a-z0-9。将其读作" a到z和0到9"。这是写abcdefghijklmnopqrstuvwxyz0123456789的简短方法。

基本上,正则表达式所说的是:"查找不在' a'之间的所有字母。和' z'或者在' 0'之间和' 9'"。

答案 1 :(得分:15)

我知道原始海报要求提供一个简单的正则表达式,但是,更多参与清理文件名,包括文件名长度,保留文件名,当然还有保留字符。

查看code in node-sanitize-filename以获得更强大的解决方案。

答案 2 :(得分:1)

我认为您的要求是用_替换空格和撇号,并在最后附加.html尝试找到这样的正则表达式。

参考

http://www.regular-expressions.info/javascriptexample.html

答案 3 :(得分:1)

要更灵活,更健壮地处理unicode字符等,可以将slugify与某些正则表达式结合使用以删除unsafe URL characters

const urlSafeFilename = slugify(filename, { remove: /"<>#%\{\}\|\\\^~\[\]`;\?:@=&/g });

这会在您的网址中产生不错的kebab-case文件名,并允许a-z0-9范围之外的更多字符。