使用短掩码检查ip地址的Regualr表达式

时间:2015-06-17 10:26:39

标签: php validation ip-address

我想验证带掩码的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";
}

2 个答案:

答案 0 :(得分:2)

你的实际正则表达式是:

$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 :(得分:0)

试试这个:

$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";
}