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

时间:2015-12-13 12:36:22

标签: javascript validation url-scheme

我需要确保没有有效方案的网址被捕获并且在他们面前添加了http://

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

var a = "www.example.com";

1 个答案:

答案 0 :(得分:2)

事实证明,您所展示的是完全有效的相对网址。区分相对URL和破坏的绝对URL必然会产生一些猜测。

如果您知道自己没有处理相对网址,那么根据定义,我们正在处理应该有方案的链接,因此我们可以寻找那些没有方案的链接。如果我们引用RFC-3986 §3,我们会看到该方案与:的其余网址分开:

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,后跟零个或多个alphanums,+-. ,通过://

从网址的其余部分分离出来
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+.\-]* - 任何字母,数字,*+.的零或更多(最后为-)。< / LI>
  • : - 冒号

... i标志意味着“不区分大小写。”