GWT Java URL验证器

4

有没有一种在GWT Java中纯粹地验证URL是否有效而不使用任何JSNI的函数?

3个回答

10

我正在使用这个(利用正则表达式):

private RegExp urlValidator;
private RegExp urlPlusTldValidator;
public boolean isValidUrl(String url, boolean topLevelDomainRequired) {
    if (urlValidator == null || urlPlusTldValidator == null) {
        urlValidator = RegExp.compile("^((ftp|http|https)://[\\w@.\\-\\_]+(:\\d{1,5})?(/[\\w#!:.?+=&%@!\\_\\-/]+)*){1}$");
        urlPlusTldValidator = RegExp.compile("^((ftp|http|https)://[\\w@.\\-\\_]+\\.[a-zA-Z]{2,}(:\\d{1,5})?(/[\\w#!:.?+=&%@!\\_\\-/]+)*){1}$");
    }
    return (topLevelDomainRequired ? urlPlusTldValidator : urlValidator).exec(url) != null;
}

我发现这个程序不能验证带有斜杠结尾的URL,例如'http://google.com/'。 - Andy Smith
@Andy:我刚写了一个小的JUnit测试,结果在 google.com/ 上返回了 false,但是在 http://google.com/ 上(无论是否有尾随斜杠)都返回了 true。根据URL的定义,模式前缀(例如“http”)后跟 :// 是必需的,因此 google.com 是无效的。 - svub
@Sven 啊,抱歉,我误以为我在前面添加了 http://,但很有可能我忘记了!(+1) - Andy Smith
我如何检测带参数的URL?例如:https://xyz.com/getUser.action?id=1&pwd=2 - Sourabh
你可以使用上面的RegExp先测试一个有效的URL,然后再测试URL是否包含“?”-这应该是最简单的解决方案。否则,您需要从最后一个可选类([...?...]+)中取出“?”并使其成为必需的。 - svub

0

org.apache.commons.validator.UrlValidator和静态方法isValid(String url)可能对此有所帮助。


请注意,这对于任何客户端 GWT 都不起作用,因为 Apache Commons 不是 GWT 模块。 - IrishDubGuy

0

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