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
标志表示“不区分大小写”。
我需要确保捕获没有有效方案的 url 并在它们前面添加 http://
。
我知道我可以在变量中搜索 http://
。但是,如果有一些工具可以正确检查有效方案,那将是更好的做法。有没有办法检查有效方案?
var a = "www.example.com";
由于您所展示的是一个完全有效的 亲戚 URL,这一事实使情况变得复杂。区分相对 URL 与损坏的绝对 URL 必然涉及一些猜测。
如果您知道您不是在处理相对 URLs,那么根据定义,我们正在处理应该具有方案的链接,因此我们可以寻找那些没有的。如果我们引用 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 后跟零个或多个字母数字,+
、-
或 .
,通过 ://
:
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
标志表示“不区分大小写”。