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

使用Javascript检查字符串是否以http开头,javascript,regex,Javascript,Regex,我一直在搜索这个问题的答案,但我找到的所有答案都不是JavaScript 我需要一种javascript方法来检查字符串是否以http、https或ftp开头。如果不是以其中一个开头,我需要在字符串前面加上http://。indexOf对我不起作用,我不认为我需要http、https或ftp。我也不想要像google.com/?q这样的东西=http://google.com触发它是有效的,因为它不是以http开头的,而indexOf会触发它是真的(如果我没有完全弄错的话) 我找到的最接近PHP

我一直在搜索这个问题的答案,但我找到的所有答案都不是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;
}

我只是不知道如何将其转换为javascript。非常感谢您的帮助。

这应该可以:

var re = /^(http|https|ftp)/
var pattern = /^((http|https|ftp):\/\/)/;

if(!pattern.test(url)) {
    url = "http://" + url;
}
这应该起作用:

var re = /^(http|https|ftp)/
var pattern = /^((http|https|ftp):\/\/)/;

if(!pattern.test(url)) {
    url = "http://" + url;
}

测试:

expect(getValidUrl('https://www.test.com')).toBe('https://www.test.com');
expect(getValidUrl('http://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('    http   :    /  /  www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('ftp://www.test.com')).toBe('ftp://www.test.com');
expect(getValidUrl('www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('://www.test.com')).toBe('http://www.test.com');
expect(getValidUrl('http%3A%2F%2Fwww.test.com')).toBe('http://www.test.com');
expect(getValidUrl('www    .  test.com')).toBe('http://www.test.com');

我进一步完善了前面的答案,使用了
newregexp(…)
来避免混乱的转义,还添加了可选的
s

var pattern=newregexp('^(https?| ftp)://');
如果(!pattern.test(url)){
url=“http://”+url;
}
var pattern=newregexp('^(https?| ftp)://');
console.log(模式测试)http://foo'));
console.log(模式测试)https://foo'));
console.log(模式测试)ftp://foo'));

console.log(模式测试('bar'))非正则表达式声明方式:

const hasValidUrlProtocol = (url = '') => 
    ['http://', 'https://', 'ftp://'].some(protocol => url.startsWith(protocol))

javascript和java deletedpossible duplicate of javascript和java deletedpossible duplicate of I建议添加对“url”值的检查,以避免在未提供值(或空)字符串时返回“http://”:如果(url&&&!//^(f|ht)tps?:\//\//I.test(url))我总是返回“未定义”字符串。你能提供一个codepen或jsfiddle吗?如果你有
空间http
的话,就把url修剪一下,这样就有问题了:p如果url像:“javascript://somethinghttp.com“在这种情况下并不重要,因为问题是“如何知道字符串是否以http开头”,这是一个很好的答案+1表示声明性!但是您需要这里的
布尔值吗?
.some()
是否已返回布尔值?是的,您是对的!