Подтвердить что ты не робот

Проверьте, начинается ли строка с http с помощью Javascript

Я искал ответы на все, и все ответы, которые я нашел, не были в 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;
}

Источник: как добавить http, если его не существует в URL

Я просто не знаю, как преобразовать это в javascript. Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

export const getValidUrl = (url = '') => {
  let newUrl = window.decodeURIComponent(url);
  newUrl = newUrl
    .trim()
    .replace(/\s/g, '');
  if (/^(:\/\/)/.test(newUrl)) {
    return 'http${newUrl}';
  }
  if (!/^(f|ht)tps?:\/\//i.test(newUrl)) {
    return 'http://${newUrl}';
  }
  return newUrl;
};

тесты:

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');

Ответ 2

Это должно работать:

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

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

jsFiddle

Ответ 3

var url = "http://something.com"
if( url.indexOf("http") == 0 ) {
    alert("yeah!");
} else {
    alert("No no no!");
}

Ответ 4

Это должно работать:

var re = /^(http|https|ftp)/

Ответ 5

Уточняя предыдущие ответы немного больше, я использовал 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'));