是否有一个简单的正则表达式来确定路径是相对的还是哈希?
我想匹配这些:
../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
所以我需要检查那些类型的相对路径。
答案 0 :(得分:1)
不要使用像regexp等低级别的东西。这些东西已经被很多其他人解决了。特别是边缘情况。
看看URI.js,它应该完成这项工作:http://medialize.github.io/URI.js/docs.html#is
var uri = new URI("/example.org/");
uri.is("relative") === true;
答案 1 :(得分:0)
它不应该以斜杠或哈希开头,如果没有问号或哈希,它不应该包含双斜杠?我不会用一个正则表达式来测试它,匹配“没有双斜线”会非常复杂。
function test(s) {
return s.charAt(0) != "#"
&& s.charAt(0) != "/"
&& ( s.indexOf("//") == -1
|| s.indexOf("//") > s.indexOf("#")
|| s.indexOf("//") > s.indexOf("?")
);
}
会更容易,更清晰,也更快。
答案 2 :(得分:0)
上述两种解决方案都无法解决黑客进入redirect_url
或/\/example.com
的{{1}}黑客。这是我想出的方法,以确定我们的重定向URL是否是相对的:
/\\/example.com