Java 中的 url 验证问题

问题描述 投票:0回答:1

我正在尝试验证一个 url,基本上这将适用于用户可能引入任何类型的奇怪 url 的项目,例如:

我尝试使用 java.net 中的新 URI(url),但它没有正确验证,对于 +1.1234566 或数字 123337000 或单词测试它返回 true 但它不应该正确验证。

我也尝试过 apache-commons 的 UrlValidator,但是像 mypage-services.info 这样的 url 说它无效。

我尝试的最后一件事是使用正则表达式,这是我到目前为止所拥有的:

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

但它不适用于像 mypage-services.info 这样的 url 模式

我知道这似乎已经是一个重复的问题,但我已经尝试了我在类似问题中发现的所有正则表达式,但没有一个能满足我的要求。

对于任何可以为此提供帮助的人,我将不胜感激,谢谢。

java regex validation url
1个回答
0
投票

如果你想匹配你所有的例子,你实际上并不是在验证 URL。引用的 Apache Commons URLValidator 正确验证了以上所有内容。

URL 要求 by RFC 以“方案”开头,例如

https://
mailto:
。当您在浏览器的地址栏中输入
wikipedia.org
时,它会使用试探法来最好地猜测您的意思:有效的 URL
https://wikipedia.org
。你所有的例子都可以用这种方式最好地猜测 - 通过在前面加上
https://
- 除了
https%3A%2F%2Mycoolstuff.com
。这是一个更棘手的情况,因为在 URL 的方案部分中不允许使用百分比编码 - 但因此,它是一个很好的例子,说明猜测工作有多快变得丑陋。

我不知道有一个通用的库——可能没有,因为没有普遍正确的方法,它在某些时候会暗示主观决定。

Firefox 是这样做的。这是很多代码,它在评论中预先说明(强调我的):

正则表达式用于猜测类似 url 的字符串。这些预计不会 100% 正确,我们接受一些用户错误输入,我们不太可能 能够覆盖100%的案例.

© www.soinside.com 2019 - 2024. All rights reserved.