检查字符串是否为android上的web地址或ip

检查字符串是否为android上的web地址或ip,android,validation,ip,ip-address,Android,Validation,Ip,Ip Address,我需要验证TextEdit中输入的字符串是一个网址,如“www.stackoverflow.com”还是一个ip地址,如“64.34.119.12”。我试过这两种方法,但都没有成功。我有一个名为ip的私有类变量 方法1: public boolean isAdress(){ boolean isaddr = true; try { ip = new NetTask().execute(""+textEdit1.getTex

我需要验证TextEdit中输入的字符串是一个网址,如“www.stackoverflow.com”还是一个ip地址,如“64.34.119.12”。我试过这两种方法,但都没有成功。我有一个名为ip的私有类变量

方法1:

public boolean isAdress(){

        boolean isaddr = true;
        try
        {
            ip = new NetTask().execute(""+textEdit1.getText()).get();
        }
        catch (Exception ex)
        {
            isaddr = false;
        }
        return isaddr;
    }
方法2是在将字符串发送到NetTask之前检查字符串的方法

public boolean isAdress(){
        String adress = textEdit1.getText().toString();
        boolean isaddr = true;
        if (adress.length() > 0) {
            String[] nums = adress.split(".");
            if (nums.length == 4) {
                for (String str : nums) {
                    int i = Integer.parseInt(str);
                    if ((i < 0) || (i > 255)) {
                        isaddr = false;
                    }
                }
            } 
        }
        return isaddr;
    }

但它似乎总是返回false。

简短回答:尝试使用regex

编辑:

如果你谷歌你可以找到正确的正则表达式字符串的IP地址和网址

注:
URL的正则表达式可以根据您的需要而有所不同,您是否只需要http://https://或所有有效的URL(如market://)…

更简单的方法如何?检测它是否是IP地址,例如

public static boolean isIP(String input) {

        if (input.contains(".") && input.length()>1) {
            return TextUtils.isDigitsOnly( input.replace(".", "").trim() );
        }
        else {
            return false;
        }
    }

Patterns.IP_ADDRESS.matcher(url.matches()

验证Kotlin中的IP地址,返回true或false

fun isValidIPAddress(ip:String):Boolean {
   val reg0To255 = ("(\\d{1,2}|(0|1)\\" + "d{2}|2[0-4]\\d|25[0-5])").toRegex()
   return reg0To255.matches(ip)
}

val inputIP = "127.1.1.775"
println("Input: " + inputIP)
println("Output: " + isValidIPAddress(inputIP))
输入:127.1.1.775
输出:false

任何内容都可以是网址。你确定你需要这个吗?看看这个答案:是的,我需要知道它是否是adress,因为如果我把这个字符串传递给我的另一个方法,我的程序就会崩溃。现在你已经把@RohitMalish引入到了这个字符串中。使用regex有多容易?我对安卓相当陌生。当你不需要NetTask的时候,这在桌面上很容易做到。我需要正则表达式来表示没有任何类型的http://etc的字符串。地址必须是这种形式才能被接受“www.google.com,www.abc.com,www.stackoverflow.com,www.something.eu等等”,就像我说的:使用正则表达式,那么谷歌如何制作一个适合你的正则表达式或谷歌正则表达式……好的,我已经尝试过正则表达式,但它似乎只返回false。我编辑了我的帖子并添加了regex方法。如果你的数字在0到255之间,比如。
public static boolean isIP(String input) {

        if (input.contains(".") && input.length()>1) {
            return TextUtils.isDigitsOnly( input.replace(".", "").trim() );
        }
        else {
            return false;
        }
    }
fun isValidIPAddress(ip:String):Boolean {
   val reg0To255 = ("(\\d{1,2}|(0|1)\\" + "d{2}|2[0-4]\\d|25[0-5])").toRegex()
   return reg0To255.matches(ip)
}

val inputIP = "127.1.1.775"
println("Input: " + inputIP)
println("Output: " + isValidIPAddress(inputIP))