从字符串中创建友好的URL

时间:2014-03-11 14:50:40

标签: javascript

例如我有这个字符串:

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--

3 个答案:

答案 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);
}