url正则表达式没有查询参数

时间:2015-09-02 19:44:33

标签: java regex

我知道这个问题可能会被很多人回答,但我正在尝试按照以下标准构建正则表达式 -

验证输入的网址,以包含可选的http://或https://,后跟可选的www。其次是有效域(仅包含a-z,A-Z或 - )或者是ip-address,后跟可选的port-number,后跟可选路径,没有查询参数

我需要测试URL,使其不包含XSS摄取的特殊字符,也不包含查询字符串参数。

我在Java中使用以下正则表达式模式 -

"^(http:\\/\\/|https:\\/\\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$"

4 个答案:

答案 0 :(得分:3)

使用以下正则表达式:

^((?:http:\/\/)|(?:https:\/\/))(www.)?((?:[a-zA-Z0-9]+\.[a-z]{3})|(?:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?::\d+)?))([\/a-zA-Z0-9\.]*)$

DEMO

enter image description here

答案 1 :(得分:1)

让我们分解一下:

  • 必须以可选http://https://开头。所以我们需要写一个选择:它是httphttps,后跟://。 “要么”在组内写有|。因此“httphttps”变为(http|https)。然后必须跟着://。这个角色都不是特别的,所以我们不需要逃避它们。然后我们得到(http|https)://。最后,所有这些都是可选的:这意味着它只能发生0或1次。这是使用?编写的。我们得到:((http|https)://)?
  • 后跟有效域(仅包含a-z,A-Z或 - )或ip-address,后跟可选的端口号
    • 案例有效域:如果域包含a-z,A-Z或 - 中的至少一个,则域有效。这是使用([a-zA-Z-])+编写的。 +表示“至少一个”,[a-zA-Z-]表示匹配的字符类。
    • 案例IP地址和端口:IP地址的格式为XXX.XXX.XXX.XXX,其中每个X可以出现一到三次。这写成\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(我们可以写得更好,但我保持简单)。 {1,3}表示“一到三次”,\d表示每个数字(与字符类[0-9]相同)。 \.用于转义特殊字符.。然后,端口是:前面的一些数字:这写为:\d+;由于它是可选的,我们将?包裹在其周围以到达(:\d+)?。最后,我们有:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?
    • 最终组合:它是有效域或有效IP地址。我们得到(([a-zA-Z-])+|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?)),即(validDomainExpression|IPAdressExpression)
  • 后跟可选路径,没有查询参数。这意味着我们可以接受除?之外的任何字符。这写为[^?]。在字符类中,?不再是特殊字符,只是表示?字符; ^表示“不”,即“除了”之外的所有内容。因此,“除?之外的所有内容”的可选序列都写为([^?]*)?

最终正则表达式:

^((http|https)://)?(www.)?(([a-zA-Z-])+|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?))([^?]*)?$

答案 2 :(得分:0)

您可以使用此在线java正则表达式测试程序来验证您的正则表达式。

我已尝试使用第一个正则表达式并且正常工作。使用第一个链接,您可以在当时测试多个输入。

提示。没有必要在java代码中使用scape符号来测试这个网站上的正则表达式。

答案 3 :(得分:0)

感谢您的宝贵回复。

我现在终于可以正确解决我的正则表达式了。

使用正则表达式:

    ^((http:\\/\\/)|(https:\\/\\/))?(www.)?(([a-zA-Z0-9-]+)([\\.a-zA-Z0-9-]*)|(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}))?(:\\d+)?([\\/a-zA-Z0-9\\.-]*)$

测试案例:

    1. "http://net.tutsplus.com/about", result: true
    2. "http://net.tutsplus.com/", result: true
    3. "www.google.com", result: true
    4. "https://regex101.com/", result: true
    5. "http://makeit.london", result: true
    6. "http://makeit.london/", result: true
    7. "http://make-it.london/", result: true
    8. "http://localhost:8080/demoapp/test/", result: true
    9. "test.sub-domain3.sub-domain2.sub-domain1.domain-tld-0:8080/demoapp/test/mypage.html", result: true
    10. "https://test.london:80/test-domain/test-path/test.html", result: true
    11. "https://127.0.0.1:8080/demoapp/test-path/mypage.html", result: true
    12. "https://127.0.0.1:8080/demoapp/test/mypage.html", result: true
    13. "http://www.example.com/mypage.aspx", result: true
    14. "http://www.192.168.2.3:231/mybranch/mypage.aspx", result: true
    15. "http://example.com/somedir/somefile/", result: true
    16. "https://192.213.23.12:231/branch/mypage/", result: true
    17. "https://192.213.23.12:231/branch/mypage", result: true
    18. "https://192.213.23.12:/branch/mypage/", result: false
    19. "javascript('XSS');", result: false
    20. "javascript(\"XSS\");", result: false
    21. "javascript(1);", result: false
    22. "http://a.b/\"onerror=\"javascript:alert(1);", result: false
    23. ",", result: false
    24. "https://Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tincidunt metus. Praesent ante ligula, maximus eu quam eu, blandit auctor mi. Morbi viverra a lectus luctus tincidunt. Morbi tristique condimentum eleifend. Maecenas mattis auctor ligula, quis placerat leo luctus et. Etiam euismod massa sit amet nisl porta aliquet. Nunc commodo aliquam orci vitae feugiat. Mauris efficitur sem eget ante vestibulum vestibulum et sed ex. Quisque enim ipsum, dapibus ut interdum in, consequat at tortor. Aenean cursus tellus arcu, id placerat nisl finibus quis. Sed ullamcorper imperdiet sapien et cursus. In posuere nisl mauris.", result: false
    25. "<script></script>", result: false
    26. "https://192.213.23.12:231/branch/mypage/?foo=bar", result: false
    27. "https://192.213.23.12:231/branch/mypage?foo=bar", result: false
    28. "http://example.com/somedir/somefile/?foo1=bar1&foo2=bar2", result: false
    29. "https://127.0.0.1:8080/demoapp/test/mypage.html?foo=bar", result: false
    30. "http://make-it.london:8080/demoapp/test/mypage.html?foo=bar", result: false
    31. "http://google.com/some/file!.html", result: false
    32. "test.sub-domain3.sub-domain2.sub-domain1.domain-tld-0:8080/demoapp/test/mypage.html?foo1=bar1&foo2=bar2", result: false