使用Javascript检查字符串是否以http开头

时间:2012-07-02 20:45:45

标签: javascript regex

我一直在寻找这个问题的答案,我发现的所有答案都不是用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。任何帮助将不胜感激。

6 个答案:

答案 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;
}

jsFiddle

答案 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)))