[英]How to generate url slug from chinese characters?
通常用于生成 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
,它在网络浏览器 url 输入框中看起来像这样(并且它有效):
http://example.com/中文-标题
但是我还想删除任何特殊字符,如!@#$%^&*)
等。问题是string.js
库在内部使用以下代码:
.replace(/[^\w\s-]/g
它删除了任何特殊字符,但也删除了中文字符,因为它们与\\w
regexp 不匹配......
所以我的问题是 - 如何修改上面的正则表达式以使其保留中文字符?
我试过
replace(/[^a-zA-Z0-9_\s-\u3400-\u9FBF]/g,'')
但它仍然替换了汉字...
如果要匹配(或排除)一组字符(带方括号)中的破折号-
字符,则必须将其放在最后。
您的正则表达式匹配的字符不是
az
范围内AZ
范围内0-9
范围内_
\\s-\㐀
范围内,这是你的问题-
\龿
你想做:
replace(/[^a-zA-Z0-9_\u3400-\u9FBF\s-]/g,'')
做一个积极的匹配列表:
replace(/[\!@#\$%^&\*\)]/g,'')
无论如何,我会考虑从中取出 URL 元字符:
replace(/[\!@\$\^\*\)]/g,'')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.