正则表达式确保HTTPS URL架构

时间:2015-01-05 05:49:05

标签: javascript regex

我需要在网址中替换'http://' 'https://'(前者存在);如果'http://''https://'不是前缀(架构),那么我需要在网址前加上'https://'

我只需检查网址是否以'http'开头,并相应地将其作为'https'的前缀,或者替换'http'(如果存在)。它很简单,需要2行代码,但是......

是否可以使用JavaScript正则表达式函数执行一行?

3 个答案:

答案 0 :(得分:1)

function simpleHttpsPrefixer(url) {
    return url.replace(/^(?:https?:\/\/)?(.*)/, "https://$1");
}

答案 1 :(得分:0)

只做

var str = "http://www.whatever.com.au";
str = str.replace("http://", "https://");
alert(str);

如果你想单行:

url = url.replace("http://", "https://");

答案 2 :(得分:0)

正则表达式解决方案

是的,可以使用JS正则表达式替换在一个语句中执行此操作:

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

下面的代码段演示了上述带有httphttps和无模式网址的单语句正则表达式解决方案。



var schemalessUrl = "www.whatever.com.au";
var httpUrl = "http://www.whatever.com.au";
var httpsUrl = "https://www.whatever.com.au";

var urls = [schemalessUrl, httpUrl, httpsUrl];

for (var i = 0; i < urls.length; i++) {
    urls[i] = urls[i].replace(/^(?:https?:\/\/)?(.*)/, 'https://$1');
    console.log(urls[i]);
    alert(urls[i]);
}
&#13;
&#13;
&#13;

非正则表达式解决方案

当然,如果没有正则表达式替换,也可以在单个语句中执行此操作。三元条件运算符可以将任何事物折叠成一个语句(无论好坏):

url = url.indexOf('http://') === 0 ? url.replace('http://', 'https://') : (url.indexOf('https://') !== 0 ? 'https://' + url : url);

下面的代码段同样演示了上述单语句,正则表达式解决方案,其中包含httphttps和无模式网址。

&#13;
&#13;
var schemalessUrl = "www.whatever.com.au";
var httpUrl = "http://www.whatever.com.au";
var httpsUrl = "https://www.whatever.com.au";

var urls = [schemalessUrl, httpUrl, httpsUrl];

for (var i = 0; i < urls.length; i++) {
    urls[i] = urls[i].indexOf('http://') === 0 ? urls[i].replace('http://', 'https://') : (urls[i].indexOf('https://') !== 0 ? 'https://' + urls[i] : urls[i]);
    console.log(urls[i]);
    alert(urls[i]);
}
&#13;
&#13;
&#13;

话虽如此,我更喜欢正则表达式解决方案,但TMTOWTDI。