如何验证Java中的字符串是否为有效的URL?
java.net.URL
对象。如果它不是一个合法的 URL,将会抛出一个 MalformedURLException
异常。java.net.URL
会导致失败,出现java.net.MalformedURLException: no protocol
。这是预期的行为,并已记录为此类行为。这里没有误报。 - GrodriguezUrlValidator
。这将使您避免编写需要通过捕获异常来实现逻辑流程的代码,而这通常被认为是一种不好的做法。但在这种情况下,如果您将此功能移动到名为isValidUrl(..)
的实用方法中,则我认为这样做是可以的,就像其他人建议的那样。对于Android,只需添加此行:
boolean isValid = URLUtil.isValidUrl( "your.uri" );
new URL
/new URI
),但是 URL
不喜欢没有方案的 URL(而且它似乎只检查方案,什么都不检查),而 URI
似乎会返回“true”,无论你扔什么(甚至是“---”)。到目前为止,我还没有找到一种能够99.9%正常工作的方法来完成 OP 所要求的操作。 - Nephpublic static boolean isValidURL(String urlString) {
try {
URL url = new URL(urlString);
url.toURI();
return true;
} catch (Exception e) {
return false;
}
}
根据RFC2396的规定进行检查,格式为<scheme>://<authority><path>?<query>#<fragment>
,但是scheme
必须被URL
源代码所知道。
以下URL
不合法:
telnet://melvyl.ucop.edu
news:comp.infosystems.www.servers.unix
www.google.com
new URI(urlString)
? - Chloe如果你在编写Android程序,你可以使用android.webkit.URLUtil
进行测试。
URLUtil.isHttpUrl(url)
URLUtil.isHttpsUrl(url)
希望它会有所帮助。
补充Bozho的答案,更加实用的方法如下:
使用此示例代码(参考资料)进行测试:
//...your imports
import org.apache.commons.validator.routines.*; // Import routines package!
public static void main(String[] args){
// Get an UrlValidator
UrlValidator defaultValidator = new UrlValidator(); // default schemes
if (defaultValidator.isValid("http://www.apache.org")) {
System.out.println("valid");
}
if (!defaultValidator.isValid("http//www.oops.com")) {
System.out.println("INvalid");
}
// Get an UrlValidator with custom schemes
String[] customSchemes = { "sftp", "scp", "https" };
UrlValidator customValidator = new UrlValidator(customSchemes);
if (!customValidator.isValid("http://www.apache.org")) {
System.out.println("valid");
}
// Get an UrlValidator that allows double slashes in the path
UrlValidator doubleSlashValidator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES);
if (doubleSlashValidator.isValid("http://www.apache.org//projects")) {
System.out.println("INvalid");
}
运行/调试
这个函数用于验证URL,返回 true(有效URL)或 false(无效URL)。
public static boolean isURL(String url) {
try {
new URL(url);
return true;
} catch (Exception e) {
return false;
}
}
import java.net.URL;
已经被导入。http://ProductDetail/2Thumbz, Inc.?source=Admin
不会失败(逗号、空格、句点)。 - Chloe^(https://|http://|ftp://|ftps://)(?!-.)[^\\s/\$.?#].[^\\s]*$