1

我有一个预值为“http://”的文本框。

有时人们粘贴整个链接并忘记删除预设值,得到一个http://http://.

我想出了如何更换它。

但是,我正在尝试编写以这种方式转换的东西: http://http://->http://http://https://->https://

我写了那个,因为https://它给出了一个错误。因为http://根本没有任何事情发生。

我究竟做错了什么?

function replacehttp() {

    var iurl = document.getElementById('url').value;

    if (iurl.substring(0, 15) == 'http://https://') {

        var surl = iurl.replace('http://https://', 'https://').
        document.getElementById('url').value = surl;
        generate();

    } else if (iurl.substring(0, 14) == 'http://https://') {
        var ourl = iurl.replace('http://http://', 'http://');
        document.getElementById('url').value = ourl;
        generate();
    }
}

PS: generate() 是我想在这两种情况下调用的其他函数

4

3 回答 3

4

我会使用正则表达式来做到这一点:

iurl = iurl.replace(/^http:\/\/(https?:\/\/)/, "$1");

如果你不熟悉正则表达式,你可以用谷歌搜索它,但简单地说:

之间的表达式/ ... /是正则表达式文字。

^匹配字符串的开头

/必须被转义\/,所以表达式真的是^http://(https?://)

?表示前一个字符(即s)是可选的。

()用于捕获匹配的值(即要么http://https://)。

$1是一个特殊的值含义:替换为第一个捕获的组。

于 2013-08-20T11:31:27.740 回答
1

您的代码显然是错误的 - 它应该是:

} else if (iurl.substring(0, 14) == 'http://http://') {
//                                             ^ not https

一个更简单的选择:

function replacehttp() {
    var iurl = document.getElementById('url').value;
    iurl = iurl.replace(/^http:\/\/(https?:\/\/)/, '$1');
    document.getElementById('url').value = iurl ;
    generate();
}
于 2013-08-20T11:30:59.403 回答
0

你的函数有一些错误,使用这个:

函数替换http() {

        var iurl = document.getElementById('url').value;

        if (iurl.substring(0, 15) == 'http://https://') {
            alert('123');
            var surl = iurl.replace('http://https://', 'https://');
            document.getElementById('url').value = surl;
            generate();
        }
        else if (iurl.substring(0, 14) == 'http://http://') {
            var ourl = iurl.replace('http://http://', 'http://');
            document.getElementById('url').value = ourl;
            generate();
        }
        return false;
    }

有了这个:<input type="submit" onclick="return replacehttp()" />

在这条线之后var surl = iurl.replace('http://https://', 'https://')..而不是这个;

于 2013-08-20T11:41:27.760 回答