【问题标题】:How do you validate an IP address on Android?如何在 Android 上验证 IP 地址?
【发布时间】:2011-04-11 12:19:41
【问题描述】:

我在 Android(作为客户端)和 PC(作为服务器)之间使用简单的套接字通信。我让用户将 IP 地址输入到 EditText 字段中,并且我想验证 IP 地址。如何在 Android 上验证 IP 地址?

【问题讨论】:

    标签: android


    【解决方案1】:
    Patterns.IP_ADDRESS.matcher(url).matches();
    

    【讨论】:

    • 尽可能简单。
    • 完美...简单优雅
    • 如何用端口做ip?
    • @MichaelMao 要验证端口,您只需验证它是 0-65535 之间的数字
    • 最佳答案。
    【解决方案2】:

    API 级别 8+:

    您可以使用Patterns.IP_ADDRESS 全局正则表达式。

    API 级别 1-7:

    如果你的目标设备是 android

    private static final Pattern IP_ADDRESS
        = Pattern.compile(
            "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
            + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
            + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
            + "|[1-9][0-9]|[0-9]))");
    Matcher matcher = IP_ADDRESS.matcher("127.0.0.1");
    if (matcher.matches()) {
        // ip is correct
    }
    

    【讨论】:

      【解决方案3】:

      要在输入 IP 时检查它,您可能需要使用它:

      private static final Pattern PARTIAl_IP_ADDRESS =
                Pattern.compile("^((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])\\.){0,3}"+
                                 "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])){0,1}$"); 
      
      ipEditText.addTextChangedListener(new TextWatcher() {                       
          @Override public void onTextChanged(CharSequence s, int start, int before, int count) {}            
          @Override public void beforeTextChanged(CharSequence s,int start,int count,int after) {}            
      
          private String mPreviousText = "";          
          @Override
          public void afterTextChanged(Editable s) {          
              if(PARTIAl_IP_ADDRESS.matcher(s).matches()) {
                  mPreviousText = s.toString();
              } else {
                  s.replace(0, s.length(), mPreviousText);
              }
          }
      });
      

      【讨论】:

      【解决方案4】:

      Kotlin 中寻找有效 IP 的解决方案:

      import java.util.regex.*;
       ...
       ...
          fun isValidIPAddress(ip:String):Boolean {
            // Regex for digit from 0 to 255
            val reg0To255 = ("(\\d{1,2}|(0|1)\\" + "d{2}|2[0-4]\\d|25[0-5])")
            // regex 0 To 255 followed by a dot, 4 times repeat
            // validation an IP address.
            val regex = (reg0To255 + "\\."
                         + reg0To255 + "\\."
                         + reg0To255 + "\\."
                         + reg0To255)
            val p = Pattern.compile(regex)
            val m = p.matcher(ip)
            return m.matches()
          }
          
          val inputIP = "127.1.1.775"
          println("Input: " + inputIP)
          println("Output: " + isValidIPAddress(inputIP))
          
       ...
       ...
      

      输入:127.1.1.055 输出:真

      输入:127.ip.1.75 输出:假

      输入:127.201.1.775 输出:假

      【讨论】:

        【解决方案5】:

        阅读关于Patterns.IP_ADDRESS 的描述我已经看到它将被弃用(在 API 31 上)并且需要使用另一个函数 (InetAddresses.isNumericAddress) 来检查 IP 地址。

        结果:

        fun isIpValid(ip: String): Boolean {
            return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                InetAddresses.isNumericAddress(ip)
            } else {
                Patterns.IP_ADDRESS.matcher(ip).matches()
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-05
          • 2013-04-16
          • 2012-02-29
          • 1970-01-01
          • 2019-11-14
          • 2013-07-08
          • 1970-01-01
          • 2010-09-24
          相关资源
          最近更新 更多