Javascript 检查 url 中是否没有有效方案

Javascript to check if no valid scheme in url

我需要确保捕获没有有效方案的 url 并在它们前面添加 http://

我知道我可以在变量中搜索 http://。但是,如果有一些工具可以正确检查有效方案,那将是更好的做法。有没有办法检查有效方案?

var a = "www.example.com";

由于您所展示的是一个完全有效的 亲戚 URL,这一事实使情况变得复杂。区分相对 URL 与损坏的绝对 URL 必然涉及一些猜测。

如果您知道您不是在处理相对 URLs,那么根据定义,我们正在处理应该具有方案的链接,因此我们可以寻找那些没有的。如果我们引用 RFC-3986 §3,我们会看到该方案通过 ::

与 URL 的其余部分分开
The following are two example URIs and their component parts:

         foo://example.com:8042/over/there?name=ferret#nose
         \_/   \______________/\_________/ \_________/ \__/
          |           |            |            |        |
       scheme     authority       path        query   fragment
          |   _____________________|__
         / \ /                        \
         urn:example:animal:ferret:nose

...并且从 §3.1,我们可以看到方案是一系列 alpha 后跟零个或多个字母数字,+-.,通过 ://:

与 URL 的其余部分分开
scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )

所以你可以用一个简单的正则表达式来判断:

if (!/^[a-z][a-z0-9+.\-]*:/i.test(a)) {
    // 'a' doesn't start with a scheme
}

但同样,前提是您不处理亲戚 URL。

正则表达式表示:

  • ^ - 输入开始
  • [a-z] - RFC 中通常定义的任何字母字符(例如,英文字母 A 到 Z)
  • [a-z0-9+.\-]* - 任意字母、数字、+.- 的零个或多个(即末尾的 *) .
  • : - 冒号

...并且 i 标志表示“不区分大小写”。