2012-07-13 78 views
0

我想验证一个没有域的url,只是路径和参数。验证url的路径

,我使用做的大部分工作的正则表达式,但它有一些错误,我不知道如何阻止(我用正则表达式很小白):

/^(\/([\w#!:.?+=&%@!\-\/])+)$/i 

下一个例子正确验证

/asd.jsp -> true 
/asd/asd.jsp -> true 
/asd/asd.jsp?bar=baz&inga=42&quux -> true 
/asd/asd.jsp?bar=ba z&inga=42&quux -> false 

但这者的arent正确ulrs和他们给了我真实太:

/asd/asd./jsp -> true :(
/asd/asd.jsp/ -> true :(
/asd./asd.jsp -> true :(
/asd///asd.jsp -> true :(
/asd/asd.jsp&bar=baz?inga=42?quux -> true :(

你是否建议使用函数而不是正则表达式?

非常感谢!

+0

看看[本问题](http://stackoverflow.com /问题/ 161738 /什么,是最最好的正则表达式来检查,如果-A-字符串是-A - 有效的URL)。只要删除域的正则表达式(搜索第三点)。 – 2012-07-13 12:08:36

+1

'/ asd/asd.jsp /'是一个有效的网址 – 2012-07-13 12:09:53

回答

0

试试这个:

^(\\/\\w+)+\\.\\w+(\\?(\\w+=[\\w\\d]+(&\\w+=[\\w\\d]+)+)+)*$ 

我已经逃脱了特殊字符,这样你就可以直接在Java中使用它。 顺便说一句,/asd/asd.jsp?bar=baz & inga = 42 & quux不是一个有效的URL。

转义的正则表达式:

^(\/\w+)+\.\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)+)+)*$ 
+0

我已经改变了你的解决方案,允许值“/asd/asd.jsp”和只有一个参数“?”: '^(\ \ w +)+ \。\ w +(\?(\ w + = [\ w \ d] +(&w + = [\ w \ d] +)*)+){0,1} $' 作为最后一个请求,也可以允许值“/ asd /”和“/ asd”? 非常感谢您的解决方案,真的很棒! – Masta 2012-07-13 15:25:17

0
^(\/\w+)+(\.)?\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)*)+){0,1}$ 

有效的:

/test 
/test/test 
/test.jsp 
/test.jsp?v=1 
/test.jsp?v=1&v=2 
/test/test.jsp?v=1&v=2 

无效:

/test/test./jsp 
/test/test.jsp/ 
/test./test.jsp 
/test///test.jsp