我对正则表达式不熟悉,我想使用preg_match
函数来判断一个字符串是否是IP地址。
例如,
$string = "10.0.0.1";
preg_match($regex, $string);
应该返回true。那么,$regex
应该是什么?
我对正则表达式不熟悉,我想使用preg_match
函数来判断一个字符串是否是IP地址。
例如,
$string = "10.0.0.1";
preg_match($regex, $string);
应该返回true。那么,$regex
应该是什么?
不必要时不要使用正则表达式 :)
$valid = filter_var($string, FILTER_VALIDATE_IP);
虽然如果你真的想要一个正则表达式...
$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);
但是该正则表达式仅验证格式,任何八位组的最大值均为无符号字节的最大值,即255
。
这就是为什么需要IPv6-IPv4地址仅有32位长,而互联网非常流行 :)。
$valid = (filter_var($string, FILTER_VALIDATE_IP) !== false);
。 - Andy Fleming(bool)
。 - alex/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
您的示例中应该做的是(其中包含一个不是 IP 地址的字符串)。当然,这只是一个 IPv4 地址。
/^(?:(?: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]?)$/
这将检查完美范围,包括是否有任何4个范围中的一个高于255。
45.56.78.888
不是一个 IP 地址。 - kapa