通常,对于生成url段塞,我使用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浏览器url输入框中看起来是这样的(而且它可以工作):
http://example.com/中文-标题不过,我也想删除任何特殊字符,如!@#$%^&*)等。问题是string.js库内部正在使用以下代码:
.replace(/[^\w\s-]/g它删除了任何特殊字符,但也删除了与\w regexp不匹配的汉字。
因此,我的问题是-如何修改上述regexp,使其保持汉字?
我试过了
replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'')但它仍然取代了汉字..。
发布于 2014-09-06 09:48:15
如果要匹配(或排除)一组字符中的破折号-字符(带有方括号),则必须将其放在末尾。
您的regexp匹配的字符不是
a-zA-Z0-9_\s-\u3400,这是你的问题-\u9FBF你想做的是:
replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'')发布于 2014-09-06 09:45:27
做一个肯定的匹配列表:
replace(/[\!@#\$%^&\*\)]/g,'')无论如何,我会考虑从其中删除URL元字符:
replace(/[\!@\$\^\*\)]/g,'')https://stackoverflow.com/questions/25698733
复制相似问题