[英]determine if a path is relative or absolute
是否有简单的正则表达式来确定路径是相对路径还是散列?
我要匹配这些:
../index.php
js/funct.js
./home/
php/file.php?url=http://www.google.com
index.html#about=http://www.google.com
但不是这些:
http://www.google.com
http://google.com
/index.php
/
//google.com
#div4
这是我到目前为止的内容:
/^[^#\/]|\/\//.test(url)
但这不起作用。 有什么办法可以使它正常工作吗?
顺便说一句,我意识到//google.com
在技术上是相对的,但是我仍然不想匹配这种情况
我需要它来告诉我是否需要处理pushState之后的链接。 考虑一下,如果我从/
开始,然后将pushState
d转到/page1/
则具有href为'index2.html'
的链接应该转到/index2.html
但现在将转到/page1/index2.html
因此,我需要检查那些相对路径类型。
不要使用诸如regexp等低级的东西。这些东西已经被很多其他人解决了。 尤其是边缘情况。
看一下URI.js ,它应该可以完成工作: http : //medialize.github.io/URI.js/docs.html#is
var uri = new URI("/example.org/");
uri.is("relative") === true;
它不应以斜杠或哈希开头,并且如果前面没有问号或哈希,则不应包含双斜杠? 我不会用一个正则表达式来测试,匹配“没有双斜杠”会非常复杂。
function test(s) {
return s.charAt(0) != "#"
&& s.charAt(0) != "/"
&& ( s.indexOf("//") == -1
|| s.indexOf("//") > s.indexOf("#")
|| s.indexOf("//") > s.indexOf("?")
);
}
会更容易,更清晰和恕我直言。
所提及的解决方案均未解决骇客输入/\\/example.com
或/\\\\/example.com
的redirect_url
骇客。 这是我想出的方法,以确定我们的重定向URL是否是相对的:
var isRelative = !redirectUrl.match(/(\:|\/\\*\/)/); // Don't allow "//" (with optional "\"'s) or ":"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.