javascript - JavaScript 中检测字符串是否不是 URL?

标签 javascript jquery function

例如:

你有这个字符串:var x = "/windows/far/away/foo.jpg"

如果该字符串是 URL 还是不是,我现在该怎么办?

我需要做的是:

if (x.charAt(0) == '/') {
   x = "http://www.example.com/" + x;
}
else {
   x = "http://www.example.com/one/two/three" + x;
}

这里的问题是:当 x 是 URL 时会发生什么?像:

x = "http://www.externalpage.com/foo.jpg";

如您所见,x.charAt(0)'h',结果将是:

http://www.example.com/one/two/threehttp://www.externalpage.com/foo.jpg

现在,解决方案“也许”是这样的:

if (is_valid_url( x )) {
 ....
}
else {
 ....
}

我正在使用此函数:

function is_valid_url(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 locater
  if(!pattern.test(str)) {
    alert("Please enter a valid URL.");
    return false;
  } else {
    return true;
  }
}

但是这个函数只适用于http和https,这不适用于其他方案,如ftp或其他......

希望您能理解问题并给我一个解决方案。谢谢。

最佳答案

要使其与其他协议(protocol)一起使用,只需将模式中的 https? 替换为与您想要的任何协议(protocol)匹配的表达式,例如:

var pattern = new RegExp('^((http|https|ftp|gopher|ssh|telnet):\/\/)?'+ // protocol

关于javascript - JavaScript 中检测字符串是否不是 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295050/

相关文章:

c# - 匿名类型的属性列表

javascript - Twitter bootstrap 轮播 youtube 视频自动启动

javascript - 无法绑定(bind)触发器单击 svg 路径元素

javascript - 动态调整字体大小以适应容器大小

Javascript 倒数计时器不稳定

javascript - Jquery 在 DOM 中插入和从 DOM 中删除

javascript - jQuery - 仅在面板可见时切换关闭点击外部元素的面板

javascript - 向 JSON 回调附加一个额外的请求

javascript - 为什么我的图片只接受一些 src 属性而拒绝其他的?

JavaScript 函数返回调用该函数时要使用的对象