检查 JavaScript 字符串是否为 URL

2022-08-29 23:09:50

在JavaScript中,有没有办法检查字符串是否是URL?

正则表达式被排除在外,因为 URL 很可能写得像 ;也就是说,它可能没有 、 或 。stackoverflow.comwwwhttp


答案 1

如果要检查字符串是否为有效的HTTP URL,可以使用URL构造函数(它将抛出格式错误的字符串):

function isValidHttpUrl(string) {
  let url;
  
  try {
    url = new URL(string);
  } catch (_) {
    return false;  
  }

  return url.protocol === "http:" || url.protocol === "https:";
}

注意:根据 RFC 3886,URL 必须以方案(不限于 http/https)开头,例如:

  • www.example.com无效的 URL(缺少方案)
  • javascript:void(0)是有效的 URL,尽管不是 HTTP URL
  • http://..是主机所在的有效 URL(是否解析取决于您的 DNS)..
  • https://example..com是有效的 URL,同上

答案 2

带有答案的相关问题

或者这个来自 Devshed 的正则表达式

function validURL(str) {
  var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
    '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
    '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
    '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
    '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
    '(\\#[-a-z\\d_]*)?$','i'); // fragment locator
  return !!pattern.test(str);
}