验证网址的路径

时间:2012-07-13 11:47:05

标签: regex 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

但这些不是正确的溃疡,他们也给了我真实的:

/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 :(

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

非常感谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

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

我已经转义了特殊字符,因此您可以直接在java中使用它。 顺便说一句, /asd/asd.jsp?bar=baz&inga=42&quux 不是有效的网址。

Unescaped Regex:

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

答案 1 :(得分:0)

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

VALID:

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

INVALID:

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