Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript url安全文件名安全字符串_Javascript_Regex_String_Filenames - Fatal编程技术网

javascript url安全文件名安全字符串

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

寻找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 filename = s.replace(/[^a-z0-9]/gi, '_').toLowerCase();
说明:

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

  • i
    表示“忽略大小写差异”
  • g
    意味着“全局”,这意味着每一个匹配都应该被替换,而不仅仅是第一个匹配
所以我们所看到的实际上只是
[^a-z0-9]
。让我们一步一步读:

  • [
    ]
    定义了一个“字符类”,它是单个字符的列表。如果您要编写
    [one]
    ,那么它将匹配“o”或“n”或“e”
  • 但是,在字符列表的开头有一个
    ^
    。这意味着它应该只匹配列表中的字符而不是
  • 最后,字符列表是
    a-z0-9
    。将其理解为“a到z和0到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 });