使用短掩码检查 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";
}
我想验证带掩码的 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";
}