【问题标题】:How do I check if a users input is a valid IP address or not?如何检查用户输入的 IP 地址是否有效?
【发布时间】:2011-09-06 20:34:23
【问题描述】:

我想检查输入的输入是否是有效的 IP 地址。我想要一个可以帮助我验证用户输入的特定函数。

【问题讨论】:

  • 请不要输入全部大写字母,这在 Stake Overflow 文化中被认为是不礼貌的。此外,您要查找的词是“男人”,而不是“同性恋”。
  • @wallyk 我很确定以前也有人问过这个问题,但至少链接到重复的问题。侧边栏没有显示任何合适的内容,因此显然并不容易找到。 @SANJAY 请在询问之前搜索。 :)
  • @deceze:我没有寻找以前的答案,但我知道在过去几年里我已经看到它被问过并回答了好几次。

标签: php validation ip


【解决方案1】:
filter_var($ip, FILTER_VALIDATE_IP)

http://www.php.net/filter_var

例子:-

if(filter_var($ip, FILTER_VALIDATE_IP)){
  echo 'Valid IP';
} else {
  echo 'Not Valid IP';
}

【讨论】:

  • 我通常还会检查以确保它不是私有或保留 IP:filter_var($agree_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)
  • 是否有类似的方法来检查用户子网掩码输入是否有效?
  • 注意!它验证 "::1" :(
  • @DavidConstantine 因为这是一个有效的 IPv6 地址。
【解决方案2】:

// Usually you'd get the value from $_POST or $_GET
$ip = "10.3.1.5";
if(!filter_var($ip, FILTER_VALIDATE_IP)) {
   echo "Not a valid IP address!";
}

您可以通过过滤 IPv4 和 IPv6 IP 地址并排除私有 IP 和保留 IP 来修改此设置。

http://www.php.net/manual/filter.filters.validate.php

【讨论】:

    【解决方案3】:

    通过使用preg_match();

    function checkIPAddress($ipAddress) 
    {
        return preg_match('/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/', $ipAddress);
    }
    

    【讨论】:

    • 它只检测 ipv4 ip。不是ipv6。查看两个 IP。 is2a02:a03f:e8ea:c00:5cbc:fd44:5a92:839938.290.20.11
    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 2014-06-30
    • 1970-01-01
    • 2014-08-08
    • 2017-05-21
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多