我一直在寻找这个问题的答案,我发现的所有答案都不是用JavaScript编写的。
我需要一种方法,在javascript中,检查字符串是否以http,https或ftp开头。如果它不以其中一个开头,我需要在http://
前面加上字符串。 indexOf对我不起作用我不认为我需要http,https或ftp。此外,我不希望像google.com/?q=http://google.com
这样的东西触发它是有效的,因为它不以http开头,而indexOf会触发它为真(如果我没有完全弄错)。
我发现的最接近的PHP正则表达式是:
function addhttp($url) {
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
return $url;
}
Source: How to add http if its not exists in the url
我只是不知道如何将其转换为javascript。任何帮助将不胜感激。
答案 0 :(得分:88)
function addhttp(url) {
if (!/^(f|ht)tps?:\/\//i.test(url)) {
url = "http://" + url;
}
return url;
}
答案 1 :(得分:25)
这应该有效:
var pattern = /^((http|https|ftp):\/\/)/;
if(!pattern.test(url)) {
url = "http://" + url;
}
答案 2 :(得分:11)
var url = "http://something.com"
if( url.indexOf("http") == 0 ) {
alert("yeah!");
} else {
alert("No no no!");
}
答案 3 :(得分:2)
这应该有效:
var re = /^(http|https|ftp)/
答案 4 :(得分:1)
我进一步使用new RegExp(...)
来避免前面的答案,以避免混乱的转义,并且还添加了可选的s
。
var pattern = new RegExp('^(https?|ftp)://');
if(!pattern.test(url)) {
url = "http://" + url;
}
var pattern = new RegExp('^(https?|ftp)://');
console.log(pattern.test('http://foo'));
console.log(pattern.test('https://foo'));
console.log(pattern.test('ftp://foo'));
console.log(pattern.test('bar'));
答案 5 :(得分:1)
非正则表达式的声明方式:
export const hasValidUrlProtocol = (url = '') =>
Boolean(['http://', 'https://', 'ftp://'].some(protocol => url.startsWith(protocol)))