用于确保 HTTPS URL 架构的正则表达式
Regex to ensure HTTPS URL schema
我需要在 URL 中用 'https://'
替换 'http://'
(如果前者存在);如果 'http://'
或 'https://'
不是前缀(架构),那么我需要在 URL 前加上 'https://'
.
我可以简单地检查 URL 是否以 'http'
开头,并相应地将它作为前缀添加到 'https'
或替换 'http'
(如果存在)。就这么简单,只需要 2 行代码,但是...
是否可以使用带有 JavaScript 正则表达式函数的一行来完成?
就这样
var str = "http://www.whatever.com.au";
str = str.replace("http://", "https://");
alert(str);
如果要单线的话:
url = url.replace("http://", "https://");
function simpleHttpsPrefixer(url) {
return url.replace(/^(?:https?:\/\/)?(.*)/, "https://");
}
正则表达式解决方案
是的,可以使用 JS 正则表达式替换在一条语句中执行此操作:
url = url.replace(/^(?:https?:\/\/)?(.*)/, "https://");
下面的代码片段演示了上述单语句、正则表达式解决方案,其中包含 http
、https
和无架构 URL。
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://');
console.log(urls[i]);
alert(urls[i]);
}
非正则表达式解决方案
当然,也可以在没有正则表达式替换的情况下在单个语句中执行此操作。三元条件运算符几乎可以将任何内容折叠成一个语句(无论好坏):
url = url.indexOf('http://') === 0 ? url.replace('http://', 'https://') : (url.indexOf('https://') !== 0 ? 'https://' + url : url);
下面的代码片段类似地演示了上面的单语句、非正则表达式解决方案以及 http
、https
和无模式 URL。
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]);
}
话虽如此,我更喜欢正则表达式解决方案,但 TMTOWTDI。
我需要在 URL 中用 'https://'
替换 'http://'
(如果前者存在);如果 'http://'
或 'https://'
不是前缀(架构),那么我需要在 URL 前加上 'https://'
.
我可以简单地检查 URL 是否以 'http'
开头,并相应地将它作为前缀添加到 'https'
或替换 'http'
(如果存在)。就这么简单,只需要 2 行代码,但是...
是否可以使用带有 JavaScript 正则表达式函数的一行来完成?
就这样
var str = "http://www.whatever.com.au";
str = str.replace("http://", "https://");
alert(str);
如果要单线的话:
url = url.replace("http://", "https://");
function simpleHttpsPrefixer(url) {
return url.replace(/^(?:https?:\/\/)?(.*)/, "https://");
}
正则表达式解决方案
是的,可以使用 JS 正则表达式替换在一条语句中执行此操作:
url = url.replace(/^(?:https?:\/\/)?(.*)/, "https://");
下面的代码片段演示了上述单语句、正则表达式解决方案,其中包含 http
、https
和无架构 URL。
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://');
console.log(urls[i]);
alert(urls[i]);
}
非正则表达式解决方案
当然,也可以在没有正则表达式替换的情况下在单个语句中执行此操作。三元条件运算符几乎可以将任何内容折叠成一个语句(无论好坏):
url = url.indexOf('http://') === 0 ? url.replace('http://', 'https://') : (url.indexOf('https://') !== 0 ? 'https://' + url : url);
下面的代码片段类似地演示了上面的单语句、非正则表达式解决方案以及 http
、https
和无模式 URL。
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]);
}
话虽如此,我更喜欢正则表达式解决方案,但 TMTOWTDI。