【问题标题】:Validate the path of an url验证 url 的路径
【发布时间】:2012-07-13 11:47:04
【问题描述】:

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

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

非常感谢!

【问题讨论】:

  • 看看this question。只需删除域的正则表达式(搜索第三个点)。
  • /asd/asd.jsp/ 是一个有效的网址

标签: regex url


【解决方案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]+)+)+)*$

【讨论】:

  • 我已经稍微改变了你的解决方案以允许值“/asd/asd.jsp”和一个带有“?”的参数:^(\/\w+)+\.\w+(\?(\w+=[\w\d]+(&\w+=[\w\d]+)*)+){0,1}$ 作为最后一个请求,也可以允许值“/asd/”和“/asd”?非常感谢您的解决方案,真的很棒!
  • 在 javascript 不工作它有一个错误,如果字符串的长度是偶数它显示 false@M。阿巴斯
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2018-03-24
    相关资源
    最近更新 更多