2014-09-06 31 views
4

通常爲了生成url slug,我使用https://github.com/jprichardson/string.js庫 - 和slugify。但是它會刪除所有中文字符。作爲一種變通方法我用下面的函數:如何從漢字生成url slug?

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和它看起來像這樣的網絡瀏覽器URL輸入框(和它的作品):

http://example.com/中文-標題 

不過,我想也除去任何特殊字符,如[email protected]#$%^&*)等的問題是string.js文庫是使用下面的代碼段內部:

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

它刪除任何特殊字符,但也刪除中文字符,因爲它們不匹配\w正則表達式...

所以我的問題是 - 如何修改上面的正則表達式,使其保持中文字符?


我試圖

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

但它仍然取代中國文字...

回答

2

如果要匹配(或排除)一組字符(帶方括號)中的破折號-字符,則必須將其結尾。

你的正則表達式匹配不

    範圍
  • a-z
  • 範圍A-Z
  • 範圍 0-9
  • _
  • 範圍
  • 字符\s-\u3400那是你的問題
  • -
  • \u9FBF

你想做的事:

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

感謝現在的工作:) – user606521 2014-09-06 10:01:55