如何检查URL的有效性

时间:2017-10-02 17:28:11

标签: android string url browser

我正在使用网络浏览器,其中有一个*,供用户输入查询。我想区分搜索查询或网址。我当前的代码只是在任何查询的前面添加SearchView并尝试加载它。

这是我目前的代码。

http://www.

问题是String query = search_q; if(!query.startsWith("www.")&& !query.startsWith("http://")){ query = "www."+ query ; } if(!query.startsWith("http://")){ query = "http://"+query; } if( Patterns.WEB_URL.matcher(query).matches()){ //checks if the query looks like an URL web1.loadUrl(query); } else web1.loadUrl("https://www.google.com//search?q=+"+search_q); 即使传递Patterns.WEB_URL.matcher(query).matches()也会返回true。

3 个答案:

答案 0 :(得分:1)

检查

if( Patterns.WEB_URL.matcher(query).matches() && isUrl(query)){  //checks if the query looks like an URL
        web1.loadUrl(query);
    }

功能定义 isUrl : -

    public  Boolean isUrl(String query){

    int a=0;
    int onlyfind=0;
    for (int i = 0 ; i<query.length() ; i++){

        if (query.charAt(i) == '.')
            a++;
        if(a==1){

            onlyfind= i;
        }
    }

    if(a==1){

        if(query.substring(0,onlyfind+1).equals("http://www"))
            return  false;
    }

    return true;
}

答案 1 :(得分:0)

尝试使用此方法验证网址(查询):

//isValidURL(query);
boolean isValidURL(String url) {
  try {
    new URI(url).parseServerAuthority();
    return true;
  } catch (URISyntaxException e) {
    return false;
  }
}

如果它返回false,则:

web1.loadUrl("https://www.google.com//search?q=+"+search_q);

答案 2 :(得分:0)

我认为验证网址的最佳方法是使用正则表达式。因为如果您正在使用浏览器,则不应限制以www开头的字符串查询的验证,如果网站为dev.website.com该怎么办?它是一个有效的网站网址,或者如果地址以https开头,而不只是http,该怎么办?所以我认为尝试使用正则表达式来验证查询字符串是否为URL时具有参考模式:

private boolean isURL(CharSequence searchQuery) {
    Pattern urlPattern = Pattern.compile("(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\w\\D\\S]{2,}|[^\\s]{2,}[a-zA-Z0-9]\\.[^\\s]{2,})");
    Matcher matcher = urlPattern.matcher(searchQuery);
    return matcher.matches();
}

然后调用该方法:

String query = search_q;
if(isURL(query)) {
     web1.loadUrl(query);
} else {
    web1.loadUrl("https://www.google.com//search?q=+"+search_q);
}

希望这有帮助。