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

Javascript检查url中是否没有有效的方案,javascript,validation,url-scheme,Javascript,Validation,Url Scheme,我需要确保捕获没有有效方案的URL,并在其前面添加一个http:// 我知道我可以在变量中搜索http://。但是,如果有一些设施能够正确地检查一个有效的方案,这将是更好的做法。有没有办法检查有效的方案 var a = "www.example.com"; 您所展示的是一个完全有效的相对URL,这一事实使问题变得复杂。区分相对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说:

  • ^
    -开始输入
  • [a-z]
    -RFCs中通常定义的任何字母字符(例如,英文字母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
}