【问题标题】:Regualr expression to check ip address with short mask使用短掩码检查 IP 地址的正则表达式
【发布时间】:2015-06-17 10:26:38
【问题描述】:

我想验证一个带掩码的 IP 地址,如下所示:192.168.32.4/24,但我只找到了如何验证不带掩码的 IP:192.168.32.4

这是我的代码:

$target = "192.168.34.12";

if (preg_match("/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/", $target)) {
    echo "correct";
} else {
    echo "incorrect";
}

提前致谢。

[已解决]

$target = "192.168.34.12/24";
$regex = "/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/([1-9]|1[0-9]|2[0-4])$/";

if (preg_match($regex, $target)) {
    echo "correct";
} else {
    echo "incorrect";
}

【问题讨论】:

  • 如果你explode/ 然后分别验证 IP 和掩码怎么办?
  • 这不是我要找的,我要验证整个表达式,而不仅仅是IP

标签: php validation ip-address


【解决方案1】:

您的实际正则表达式是:

$regex = "/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/";

它可以识别这样的 IP:192.168.0.150

如果您想识别带有掩码的 IP(如 192.168.32.4/24),请执行此正则表达式:

$regex = "/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/([1-9]|1[0-9]|2[0-4])$/";

在最后一个正则表达式中,我只添加了\/([1-9]|1[0-9]|2[0-4])\ 用于分隔/。否则,正则表达式会认为它本身就结束了。最后一部分([1-9]|1[0-9]|2[0-4]) 是只接受从 1 到 24 的掩码。

最后你的代码会是这样的:

$target = "192.168.34.12/24";
$regex = "/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/([1-9]|1[0-9]|2[0-4])$/";

if (preg_match($regex, $target)) {
    echo "correct";
} else {
    echo "incorrect";
}

PS:如果你想测试你的正则表达式,这个网站很酷:https://regex101.com/

【讨论】:

  • 谢谢!这可行,但掩码是从 1 到 24。
  • 哦,好吧,所以我改变了正则表达式,因为旧的接受掩码从 0 到 999。现在正则表达式接受掩码从 1 到 24,就像你说的那样。我编辑了答案
  • 是的,我没有把 / 放在正则表达式的开头和结尾。它现在应该可以工作了,我再次编辑了答案
【解决方案2】:

试试这个:

$target = "192.168.34.123";


if (preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$target)) {
    echo "correct";
} else {
    echo "incorrect";
}

【讨论】:

  • 这允许IP是这样的:777.168.34.123
  • 希望这会对您有所帮助:preg_match("/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0] -9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ ",$target) 或者您可以使用 PHP FILTER_VALIDATE_IP 。示例:“filter_var($target, FILTER_VALIDATE_IP)”
猜你喜欢
  • 2021-10-26
  • 2022-11-22
  • 2011-05-26
  • 2013-07-31
  • 2013-01-08
  • 1970-01-01
  • 2016-02-07
  • 2011-06-20
相关资源
最近更新 更多