我正在尝试验证没有域名的网址,只是路径和参数。
我正在使用的正则表达式完成大部分工作,但它有一些我不知道如何防止的错误(我很喜欢正则表达式):
/^(\/([\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 :(
您是否建议使用函数而不是正则表达式?
非常感谢!
答案 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