通常,为了生成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,'')
但它仍然取代了中文字符......
答案 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