javascript url安全文件名安全字符串
寻找regex/replace函数,以获取用户输入的字符串,比如“John Smith's Cool Page”,并返回文件名/url安全字符串,如“John_Smith's_Cool_Page.html”,或类似的内容。我认为您的要求是用u替换空格和aphostophy's,并在最后附加.html,尝试找到这样的regex 提及javascript url安全文件名安全字符串,javascript,regex,string,filenames,Javascript,Regex,String,Filenames,寻找regex/replace函数,以获取用户输入的字符串,比如“John Smith's Cool Page”,并返回文件名/url安全字符串,如“John_Smith's_Cool_Page.html”,或类似的内容。我认为您的要求是用u替换空格和aphostophy's,并在最后附加.html,尝试找到这样的regex 提及 好吧,这里有一个可以替换任何不是字母或数字的东西,并将其全部小写,就像你的例子一样 var s = "John Smith's Cool Page"; var fil
好吧,这里有一个可以替换任何不是字母或数字的东西,并将其全部小写,就像你的例子一样
var s = "John Smith's Cool Page";
var filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();
说明:
正则表达式是/[^a-z0-9]/gi
。实际上,最后的gi
只是使用表达式时使用的一组选项
表示“忽略大小写差异”i
意味着“全局”,这意味着每一个匹配都应该被替换,而不仅仅是第一个匹配g
[^a-z0-9]
。让我们一步一步读:
和[
定义了一个“字符类”,它是单个字符的列表。如果您要编写]
,那么它将匹配“o”或“n”或“e”[one]
- 但是,在字符列表的开头有一个
。这意味着它应该只匹配列表中的字符而不是^
- 最后,字符列表是
。将其理解为“a到z和0到9”。这是一种简短的书写方式a-z0-9
因此,基本上,正则表达式所说的是:“查找不在'a'和'z'之间或'0'和'9'之间的每个字母。我知道最初的海报要求使用一个简单的正则表达式,但是,清理文件名涉及的内容更多,包括文件名长度、保留文件名,当然还有保留字符
查看,以获得更健壮的解决方案。要更灵活、更健壮地处理unicode字符等,可以将与某些正则表达式结合使用来删除
const urlSafeFilename=slagify(文件名,{remove:/“\\%\\\\\\\\\\\\^~\[\]`;\?:@=&/g});
这将在url中生成漂亮的烤肉串大小写文件,并允许在
a-z0-9
范围之外使用更多字符。定义“文件名/url安全字符串”。浏览器将对地址中的字符串进行url编码,现代计算机对文件名字符几乎没有限制。我会使用类似“aAbc1290!”^&*()-=_+;:[]{}'\“\\”,./?”.replace(/[\\\\/:\*\?“\\\\”)/g“”).trim()+”.html“
该字符串只是一个示例,但最终会寻找替换所有非安全字符的内容。基本上是任何文件名不安全的内容。[a-z][a-z][0-9][“\”,“-”]这真的很接近,我如何添加几个单独的安全字符,如
和-
?我可以这样做吗?var filename=s.replace(/[^a-z0-9.-]/gi,''.''''''.')。toLowerCase()
哦,太接近了!您只缺少了一点信息,-
是[]中的保留字符
。您需要对其进行转义。因此,您需要使用-
,而不是为破折号('-')编写-
。换句话说,正则表达式将是/[^a-z0-9\-]/gi
,我将添加一个。替换(/{u{2,}/g,''.'''''.'))
删除结果中非常难看的连续。
字符。噢,@ShalomCraimer!如此接近!;-)-
是[]
中的一个特殊字符,但只要它是括号中的最后一个字符,就没有必要转义它。这也是eslint的首选项(没有无用的转义
)。所以:/[^a-z0-9.-]/gi
!当他们在最后截断
时,扩展名不会被截断吗?例如:.jpg
const urlSafeFilename = slugify(filename, { remove: /"<>#%\{\}\|\\\^~\[\]`;\?:@=&/g });