我在CodeIgniter的一个应用程序上工作,我试图使表单上的字段动态生成URL段塞。我想做的是删除标点符号,将其转换为小写字母,并将空格替换为连字符。比如,Shane's Rib Shack会变成shanes-rib-shack。
这是我目前所掌握的。小写部分很容易,但替换似乎根本不起作用,我也不知道要删除标点符号:
$("#Restaurant_Name").keyup(function() {
var Text = $(this).val();
Text = Text.toLowerCase();
Text = Text.replace('/\s/g','-');
$("#Restaurant_Slug").val(Text);
});
function slugify(text){
return text.toString().toLowerCase()
.replace(/\s+/g, '-') // Replace spaces with -
.replace(/[^\u0100-\uFFFF\w\-]/g,'-') // Remove all non-word chars ( fix for UTF-8 chars )
.replace(/\-\-+/g, '-') // Replace multiple - with single -
.replace(/^-+/, '') // Trim - from start of text
.replace(/-+$/, ''); // Trim - from end of text
}
*基于https://gist.github.com/mathewbyrne/1280286
现在你可以转换这个字符串:
Barack_Obama Барак_Обама ~!@#$%^&*()+/-+?><:";'{}[]\|`
成:
barack_obama-барак_обама
应用于你的代码:
$("#Restaurant_Name").keyup(function(){
var Text = $(this).val();
Text = slugify(Text);
$("#Restaurant_Slug").val(Text);
});
String.prototype.slug = function(e='-'){
let $this=this
.toUpperCase()
.toLowerCase()
.normalize('NFD')
.trim()
.replace(/\s+/g,e)
.replace(/-\+/g,'')
.replace(/-+/g,e)
.replace(/^-/g,'')
.replace(/-$/g,'')
.replace(/[^\w-]/g,'');
return $this
.toUpperCase()
.toLowerCase()
.normalize('NFD')
.trim()
.replace(/\s+/g,e)
.replace(/-\+/g,'')
.replace(/-+/g,e)
.replace(/^-/g,'')
.replace(/-$/g,'')
.replace(/[^\w-]/g,'');
}
我过滤了两次,因为可能会有更多不需要的字符