我在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);
});
将这里的答案中的各种元素与normalize结合起来可以提供很好的覆盖率。保持操作的顺序,以增量地清理url。
function clean_url(s) {
return s.toString().normalize('NFD').replace(/[\u0300-\u036f]/g, "") //remove diacritics
.toLowerCase()
.replace(/\s+/g, '-') //spaces to dashes
.replace(/&/g, '-and-') //ampersand to and
.replace(/[^\w\-]+/g, '') //remove non-words
.replace(/\-\-+/g, '-') //collapse multiple dashes
.replace(/^-+/, '') //trim starting dash
.replace(/-+$/, ''); //trim ending dash
}
normize ('NFD')将重音字符分解为它们的组成部分,即基本字母加上变音符符号(重音部分)。Replace (/[\u0300-\u036f]/g, "")清除所有变音符,只保留基本字母。其余部分用内联注释解释。
我不知道“鼻涕虫”这个词从何而来,但我们开始吧:
function convertToSlug(Text) {
return Text.toLowerCase()
.replace(/ /g, '-')
.replace(/[^\w-]+/g, '');
}
第一个replace方法将空格更改为连字符,第二,replace删除除字母数字、下划线或连字符以外的任何内容。
如果你不希望“like- this”变成“like- this”,你可以用这个:
function convertToSlug(Text) {
return Text.toLowerCase()
.replace(/[^\w ]+/g, '')
.replace(/ +/g, '-');
}
这将在第一次替换时删除连字符(但没有空格),在第二次替换时将连续的空格压缩为单个连字符。
所以"like-this"就变成了"like-this"。