URL验证无协议

4

我在Java中使用了URLValidator类来验证URL。但是,如果用户没有在URL中提供任何协议,则希望仍然返回验证结果为有效。

正确解释:如果在URL中提供了"http://www.google.com",那么它也应该是一个有效的URL,如果提供了"www.google.com",则也应返回验证为有效URL。

我已经尝试了很多。请帮助我解决这个问题。 提前致谢。


我想要一个URL验证器,可以将http://www.google.com和www.google.com都视为正确的URL。目前我正在使用Java中的URLValidator类,但它会将www.google.com视为无效的URL。 - Satish Sharma
3个回答

5

请测试一下是否适用于您:

boolean foundMatch = false;
try {
    Pattern regex = Pattern.compile("\\b(?:(https?|ftp|file)://|www\\.)?[-A-Z0-9+&#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]\\.[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
    Matcher regexMatcher = regex.matcher(subjectString);
    foundMatch = regexMatcher.matches();
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

1
最好的做法是在没有协议的情况下添加http(因为这是URL的默认协议),然后验证URL。

0

您的需求非常具体,不能泛化。您正在使用的URLValidator验证正确。像http://这样的协议字符串的存在是URL有效的基本要求。对于您的需求,您可以执行以下操作:

  1. 创建一个自定义URL验证器(通过扩展URLValidator或使用组合)。
  2. 在其验证方法中,检查URL是否以协议字符串开头。如果不存在,请添加它并调用URLValidator来实际验证URL。

基本上是对URLValidator进行装饰,参考http://en.wikipedia.org/wiki/Decorator_pattern。 - Vikdor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接