Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, что строка — правильный URL

Короткий ответ

URL.canParse() возвращает true, если строка — полный адрес:

console.log(URL.canParse('https://example.com/page'));
console.log(URL.canParse('example.com'));
console.log(URL.canParse('not a url'));

Результат:

true
false
false

Только http и https

Строки вроде javascript:alert(1) — тоже правильные адреса. Для ссылок от пользователей проверяйте и протокол:

const isWebUrl = (value) => {
  try {
    const url = new URL(value);
    return url.protocol === 'http:' || url.protocol === 'https:';
  } catch {
    return false;
  }
};
 
console.log(isWebUrl('https://example.com'));
console.log(isWebUrl('javascript:alert(1)'));
console.log(isWebUrl('ftp://files.example.com'));

Результат:

true
false
false

Частая ошибка

Регулярное выражение для URL легко написать неправильно: оно либо отсекает настоящие адреса, либо пропускает плохие. Объект URL разбирает адреса точно так же, как браузер.

const naive = /^https?:\/\/\w+\.\w+$/;
 
console.log(naive.test('https://example.com/blog'));
console.log(URL.canParse('https://example.com/blog'));

Результат:

false
true

Функции из этого ответа

  • URL — Разбирает адрес на части и собирает его обратно.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.