用于使用短掩码检查 IP 地址的注册表达式


Regualr expression to check ip address with short mask

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

您的实际正则表达式是:

$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/

试试这个:

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