如何从中文字符生成url slug?

时间:2014-09-06 09:18:37

标签: javascript

通常,为了生成url slug,我使用https://github.com/jprichardson/string.js库 - 并且使用slugify方法。但是它会删除所有中文字符。作为一种解决方法,我使用以下功能:

var slugify = function(str){
   str = str.replace(/\s+/g,'-') // replace spaces with dashes
   str = encodeURIComponent(str) // encode (it encodes chinese characters)
   return str
}

因此,对于输入中文 标题,我得到%E4%B8%AD%E6%96%87-%E6%A0%87%E9%A2%98,它在Web浏览器网址输入框中看起来像这样(并且可以正常工作):

http://example.com/中文-标题

但是我想删除!@#$%^&*)等任何特殊字符。问题是string.js库在内部使用以下代码:

.replace(/[^\w\s-]/g

它会删除所有特殊字符,但也会删除中文字符,因为它们与\w正则表达式不匹配...

所以我的问题是 - 如何修改上面的regexp所以让它保留中文字符?


我试过

replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'')

但它仍然取代了中文字符......

3 个答案:

答案 0 :(得分:2)

如果您想在一组字符(带方括号)中匹配(或排除)短划线-字符,则必须将其放在最后。

您的正则表达式匹配不是

的字符
  • a-z
  • 范围内
  • A-Z
  • 范围内
  • 0-9
  • 范围内
  • _
  • \s-\u3400 范围内,这是您的问题
  • -
  • \u9FBF

你想这样做:

replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'')

答案 1 :(得分:0)

做一个肯定的比赛名单:

  replace(/[\!@#\$%^&\*\)]/g,'')

无论如何,我会考虑从中获取URL元字符:

   replace(/[\!@\$\^\*\)]/g,'')

答案 2 :(得分:0)

您可以尝试uslug,它会将汉语/漢語变成汉语漢語

如果要将汉字转换为拼音,请尝试transliteration