1

我正在尝试验证没有域的 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

但是这些不是正确的 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 :(

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

十分感谢!

4

2 回答 2

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]+)+)+)*$
于 2012-07-13T12:26:40.063 回答
1
^(\/\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
于 2016-09-12T19:10:35.110 回答