我需要确保没有有效方案的网址被捕获并且在他们面前添加了http://
。
我知道我可以在变量中搜索http://
。但如果有一些设施可以正确检查有效的方案,那将是更好的做法。有没有办法检查有效的方案?
var a = "www.example.com";
答案 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
标志意味着“不区分大小写。”