无法在javascript中使用indexOf查找字符串

时间:2016-12-28 09:09:56

标签: javascript

我正在使用该函数将https设置为输入中传递的url。

setHttps(a) {
    if (a.indexOf('http://') > 0){
            a.replace('http', 'https')
            console.log('priting url if...... ', a);
        } else if(a.indexOf('https://') == -1 && a.indexOf('http://') == -1) {
            a = a.replace (/^/,'https://');
            console.log("printing url else........ ", a);
        } 
    return a;
}

当我通过以下内容时:

  1. www.example.com - >转换为---> https://www.example.com
  2. http://www.example.com - >没有转换为---> https://www.example.com
  3. 为什么呢?看起来indexOf('http://')无法在字符串中找到http://

7 个答案:

答案 0 :(得分:4)

您的代码中至少有2个问题:

a.indexOf('http://') > 0    // should be >= 0
a.replace('http', 'https')  // replace returns a String  

尝试以下方法:

setHttps(a) {
var a = self.previewUrl.value;
if (a.indexOf('http://') >= 0){
        a = a.replace('http', 'https')
        console.log('priting url if...... ', a);
    } else if(a.indexOf('https://') == -1 && a.indexOf('http://') == -1) {
        a = a.replace (/^/,'https://');
        console.log("printing url else........ ", a);
    } 
return a;

}

答案 1 :(得分:3)

您需要使用返回值更新变量。虽然使用http://代替http来避免在http中匹配https,但索引从0开始,因此基于此更新条件。

if (a.indexOf('http://') > -1){
    a = a.replace('http://', 'https://')
}

更新else if条件a.indexOf('http://') == -1没有必要,因为它已经先检查了if

setHttps(a) {
    if (a.indexOf('http://') > -1){
            a= a.replace('http://', 'https://')
            console.log('priting url if...... ', a);
        } else if(a.indexOf('https://') == -1) {
            a = a.replace (/^/,'https://');
            // or simply concat
            // a = 'https://' + a;
            console.log("printing url else........ ", a);
        } 
    return a;
}

答案 2 :(得分:1)

了解indexOf

  

indexOf()方法返回给定元素的第一个索引   可以在数组中找到,如果不存在,则返回-1。

<强>更新

if(a.indexOf('http://') > -1){
   a = a.replace("http", "https");
}else if(a.indexOf('https') === -1){
   a = "https://" + a;
}

答案 3 :(得分:1)

在JavaScript语法中&#34; -1&#34;通常用作哨兵值,它来自C。

String.prototype.indexOf方法返回第一次出现的指定值的调用String对象中的索引,从fromIndex开始搜索。如果找不到值,则返回-1。

所以你可能想做类似的事情:

setHttps(a) {
    var a = self.previewUrl.value;
    if (a.indexOf('http://') > -1){
            a.replace('http', 'https')
            console.log('priting url if...... ', a);
        } else if(a.indexOf('https://') == -1 && a.indexOf('http://') == -1) {
            a = a.replace (/^/,'https://');
            console.log("printing url else........ ", a);
        } 
    return a;
}

答案 4 :(得分:0)

检查此代码

setHttps(a) {
    if (a.indexOf('http://') > -1){
            a.replace('http', 'https')
            console.log('priting url if...... ', a);
        } else if(a.indexOf('https://') == -1 && a.indexOf('http://') == -1) {
            a = a.replace (/^/,'https://');
            console.log("printing url else........ ", a);
        } 
    return a;
}

答案 5 :(得分:0)

更改

if (a.indexOf('http://') > 0)

if (a.indexOf('http://') > -1)

"http://www.example.com".indexOf('http://')输出0,因为'http://'位于提供的网址中的该索引处。

此外,您需要将a.replace的输出分配回a,因此最终代码如下所示:

function setHttps(a) {
    if (a.indexOf('http://') > -1){
            a = a.replace('http', 'https');
            console.log('priting url if...... ', a);
        } else if(a.indexOf('https://') == -1 && a.indexOf('http://') == -1) {
            a = a.replace (/^/,'https://');
            console.log("printing url else........ ", a);
        } 
    return a;
}

答案 6 :(得分:0)

您需要替换此

if (a.indexOf('http://') > 0)

if (a.indexOf('http://') > -1)

这是因为,indexOf()返回第一次出现的字符串的索引。在您的情况下,http://的第一次出现是0。 但是,如果indexOf() > 0,您的情况就是如此。因此,您需要更改条件,以便它也适用于0