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

kzipqqlq  于 2022-12-24  发布在  Java
关注(0)|答案(5)|浏览(135)

寻找一个regex/replace函数来接受用户输入的字符串,比如“John Smith的酷页”,并返回一个文件名/url安全字符串,比如“john_smith_s_cool_page.html”,或者类似的东西。

pgccezyw

pgccezyw1#

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

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"。这是写abcdefghijklmnopqrstuvwxyz0123456789的一种简短方式。

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

3htmauhk

3htmauhk2#

我知道最初的海报要求一个简单的正则表达式,但是,有更多的涉及到清理文件名,包括文件名长度,保留文件名,当然还有保留字符。
看看code in node-sanitize-filename,了解更强大的解决方案。

q3aa0525

q3aa05253#

为了更灵活、更健壮地处理unicode字符等,可以将slugify与某些regex结合使用来删除unsafe URL characters

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

这会在你的url中产生很好的kebab-case文件名,并且允许a-z0-9范围之外的更多字符。

pod7payv

pod7payv4#

我认为你的要求是用_替换白色和省略号,并在末尾附加.html,试图找到这样的正则表达式。
参考
http://www.regular-expressions.info/javascriptexample.html

jk9hmnmh

jk9hmnmh5#

我是这么做的,它可以把完整的句子转换成一个干净的网址。
首先,它修剪字符串,然后将空格转换为破折号(-),最后,它去掉字母/数字/破折号以外的任何字符

function slugify(title) {
  return title
    .trim()
    .replace(/ +/g, '-')
    .toLowerCase()
    .replace(/[^a-z0-9-]/g, '')
}

slug.value = slugify(text.value);
text.oninput = () => { slug.value = slugify(text.value); };
<input id="text" value="Foo: the old @Foobîdoo!!  " style="font-size:1.2em">

<input id="slug" readonly style="font-size:1.2em">

相关问题