验证一个URL路径(Validate the path of an url)

2019-07-30 10:13发布

我试图验证没有域的URL,只是路径,而params。

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

/^(\/([\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 :(

你建议使用的功能,而不是一个正则表达式的?

十分感谢!

Answer 1:

试试这个:

^(\\/\\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]+)+)+)*$


Answer 2:

^(\/\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


文章来源: Validate the path of an url
标签: regex url