我正在使用该函数将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;
}
当我通过以下内容时:
为什么呢?看起来indexOf('http://')
无法在字符串中找到http://
。
答案 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
。