Javascript 替换双http://或https://

Javascript 替换双http://或https://,javascript,Javascript,我有一个前置值为“http://”的文本框 有时人们粘贴整个链接,忘记删除预设值,得到一个http://http:// 我找到了替换它的方法 然而,我试图写一些这样转换的东西: http://http://->http://和 http://https://->https:// 我写了这个,对于https://它给出了一个错误。对于http://来说,什么都不会发生 我做错了什么 function replacehttp() { var iurl = document.getEleme

我有一个前置值为“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()是我想在两种情况下调用的另一个函数

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

} 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();
}

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

} 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();
}

我将使用正则表达式来实现这一点:

iurl = iurl.replace(/^http:\/\/(https?:\/\/)/, "$1");
如果您不熟悉regex,您可以用谷歌搜索它,但简单地说:

/…之间的表达式/
是一个正则表达式文本

^
匹配字符串的开头

/
必须用
\/
转义,因此表达式实际上是
^http://(https?://)

表示前面的字符(即
s
)是可选的

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


$1
是一个特殊的值,意思是:替换为第一个捕获的组。

我将使用正则表达式来实现这一点:

iurl = iurl.replace(/^http:\/\/(https?:\/\/)/, "$1");
如果您不熟悉regex,您可以用谷歌搜索它,但简单地说:

/…之间的表达式/
是一个正则表达式文本

^
匹配字符串的开头

/
必须用
\/
转义,因此表达式实际上是
^http://(https?://)

表示前面的字符(即
s
)是可选的

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


$1
是一个特殊值,意思是:替换为第一个捕获的组。

您的函数有一些错误,请使用以下命令:

函数replacehttp(){

有了这个:


在这一行之后
var surl=iurl.replace('http://https://“,”https://“)。
而不是这个

您的函数有一些错误,请使用以下命令:

函数replacehttp(){

有了这个:



在这一行之后
var surl=iurl.replace('http://https://“,”https://').
这里有
而不是这个

如果缺少/需要,不包括预填充的
http://
并添加它会更容易吗?为什么不删除占位符,或者使用属性
占位符
让浏览器自动为您执行此操作。您应该使用占位符属性并添加t他
http://
只有在缺少时才使用:
我知道我可以使用
占位符
,但在这种情况下,我需要使用
。我的文本框有一个
http://
值。假设有人粘贴了一个链接,它得到了
http://http://www.google.pt
。我想将其转换为
http://www.google.pt
.https://links@user2699627:再次使用“需要”。你不需要“需要”做任何事情,你可以自由地做任何你想做的事情。什么可能会导致这样的要求?根据定义,这是占位符的工作,而不是值。
value=
应设置为默认值,即如果用户传递输入,将提交at。如果缺少/需要,是否更容易不包括预填充的
http://
并添加它?为什么不删除占位符,或使用属性
占位符
让浏览器自动为您执行此操作。您应该使用占位符属性并添加
http://
仅当缺少时:
我知道我可以使用
占位符
,但在这种情况下,我需要使用
。我的文本框有一个
http://
值。假设有人粘贴了一个链接,它得到了
http://http://www.google.pt
。我想将其转换为
http://www.google.pt
。相同的thttp://links@user2699627:再次使用“需要”。你不“需要”做任何事情,你可以自由地做任何你想做的事情。什么可能会导致这样的要求?根据定义,这是占位符的工作,而不是值。
value=
应该设置为默认值,即su如果用户传递输入,则提交。错过了您的答案,并写了完全相同的内容。+1表示更快。
:)
。我还需要添加
/I
标志,以防万一。是的,这对我很有帮助。谢谢您如此多地修改了您的答案并写了完全相同的内容。+1表示更快。)。我还需要添加
/I
标志,以防万一。是的,这对我很有帮助。非常感谢你,谢谢你,@kobi。复制代码是我的错(我保存的代码没有那个错误的https)@user2699627-然后你需要发布你的实际代码,否则很难帮助你
:)
谢谢@Kobi,这对我很有帮助。你错过了一个
/
,但我发现了。尊敬的!谢谢,@Kobi。复制代码是我的错(我保存的代码没有那个错误的https)@user2699627-然后你需要发布你的实际代码,否则很难帮助你
:)
谢谢@Kobi,这对我很有帮助。你错过了一个
/
,但我发现了。问候!