例如我有这个字符串:
make no@ sen# `se !
我会像这样生成网址
make-no-sen-se!
我有这个:
var value = $('.titleVal').val();
if (value != '') {
value = value.replace(/[^a-z0-9 _-]/gi, '-').toLowerCase();
value = value.split(' ');
var result = '';
for (var i = 0; i < value.length; i++) {
if ((value.length - 1) == i) {
result += value[i];
} else {
result += value[i] + '-';
}
}
$('#vidUrl').val(result);
}
但它产生了这个:
make-no--sen---se--
答案 0 :(得分:1)
value = value.replace(/[^a-z0-9 _-]/gi, '-').toLowerCase();
应该是
value = encodeURIComponent(value.toLowerCase().replace(/[^a-z0-9 _-]+/gi, '-'));
在执行替换之前调用toLowerCase
将确保拉丁大写字母不会被破折号替换。
字符集后面的“+”会将多个字符的序列(如“@”)转换为单个短划线。
encodeURIComponent
调用将确保结果可以安全地包含在URL路径组件中。
您可能还想查看expanding the set of letters and digits that you do not replace with dashes,以便结果对非西欧用户更友好。
答案 1 :(得分:1)
使用+
或*
表示集合的重复出现。
function process(value) {
return value == undefined ? '' : value.replace(/[^a-z0-9_]+/gi, '-').replace(/^-|-$/g, '').toLowerCase();
}
var result = process($('.titleVal').val());
$('#vidUrl').val(result);
答案 2 :(得分:1)
试试这个:
var value = "-make no@ sen# `se !";
if (value != "") {
value = value.replace(/[^a-z0-9]/g, '-')
.replace(/\-{2,}/g, '-')
.toLowerCase();
if(value.indexOf("-", 1) != -1)
value = value.substring(1);
if(value.indexOf("-", value.length -1) != -1)
value = value.substring(0,value.length - 1);
console.log(value);
}