不排除前置 0 的正则思路
// (0~255).(0~255).(0~255).(0~255). => (0~255).{4}
// (0~255) = (0-199) + (200~249) + (250~255)
// (0~199) => ([0-1]?\d{1,2})
// (200~249) => (2[0-4]\d)
// (250~255) => (25[0-5])
// (0~255) => ([0-1]?\d{1,2}|2[0-4]\d|25[0-5])
function isIpv4(string $ip_str): bool
{
return preg_match('/^(([0-1]?\d{1,2}|2[0-4]\d|25[0-5])\.){4}$/', $ip_str.'.') === 1;
}
排除前置 0 的正则思路
// (0~255).(0~255).(0~255).(0~255). => (0~255).{3}
// (0~255) = (0-199) + (200~249) + (250~255)
// (0~199) = (0~9) + (10~99) + (100~199)
// (10~99) => ([1-9]\d)
// (100~199) => (1\d{2})
// (0~199) => (\d|[1-9]\d|1\d{2})
// (200~249) => (2[0-4]\d)
// (250~255) => (25[0-5])
// (0~255) => ((\d|[1-9]\d|1\d{2})|2[0-4]\d|25[0-5])
function isIpv4(string $ip_str): bool
{
return preg_match('/^(((\d|[1-9]\d|1\d{2})|2[0-4]\d|25[0-5])\.){4}$/', $ip_str.'.') === 1;
}