Javascript检查url中是否没有有效的方案
我需要确保捕获没有有效方案的URL,并在其前面添加一个Javascript检查url中是否没有有效的方案,javascript,validation,url-scheme,Javascript,Validation,Url Scheme,我需要确保捕获没有有效方案的URL,并在其前面添加一个http:// 我知道我可以在变量中搜索http://。但是,如果有一些设施能够正确地检查一个有效的方案,这将是更好的做法。有没有办法检查有效的方案 var a = "www.example.com"; 您所展示的是一个完全有效的相对URL,这一事实使问题变得复杂。区分相对URL和断开的绝对URL必然涉及一些猜测 如果您知道自己不是在处理相对URL,那么根据定义,我们处理的链接应该有一个方案,因此我们可以寻找没有方案的链接。如果我们参考,我
http://
我知道我可以在变量中搜索http://
。但是,如果有一些设施能够正确地检查一个有效的方案,这将是更好的做法。有没有办法检查有效的方案
var a = "www.example.com";
您所展示的是一个完全有效的相对URL,这一事实使问题变得复杂。区分相对URL和断开的绝对URL必然涉及一些猜测 如果您知道自己不是在处理相对URL,那么根据定义,我们处理的链接应该有一个方案,因此我们可以寻找没有方案的链接。如果我们参考,我们会看到该方案通过
:
与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
因此,您可以通过一个简单的正则表达式来判断:
if (!/^[a-z][a-z0-9+.\-]*:/i.test(a)) {
// 'a' doesn't start with a scheme
}
但同样,只有当您不处理相对URL时
regex说:
-开始输入^
-RFCs中通常定义的任何字母字符(例如,英文字母a到z)[a-z]
-任何字母、数字、[a-z0-9+.\-]*
、+
或
的零或更多(即末尾的-
)*
-冒号:
…而
i
标志意味着“不区分大小写”。不幸的是,这很复杂,并且必然涉及一些猜测,因为您已经显示了一个有效的相对URL。您是否能够假设您没有处理相对URL?是的,不幸的是,对于我的应用程序,我需要http或https或任何方案……“是”意味着“是的,我知道它们不是相对URL”?好的,现在我明白了……否我的脚本检测到内部URL……“不,我不需要允许它们”……对不起,我有时会成为一个ditzzz:-)只要你知道不是所有的相关链接都是内部的。例如,在http://example.com/index.html
,这是指向堆栈溢出的非常有效的链接:
。更多关于我贫血的小博客。啊,哇,我不知道RFC-3986§3…..所以没有内置功能,但有一个模式:/,可以检测到…..@AmyNeville:对不起,我误导了你,让我修复它。@AmyNeville:现在修复它。对于所有方案,hier部分
不必以/
开头,因此它只是冒号。现在就在我的应用程序上测试它,但当计时器允许时,如果它有效,我将接受:)
if (!/^[a-z][a-z0-9+.\-]*:/i.test(a)) {
// 'a' doesn't start with a scheme
}