正则的效率是在比不上原生的,所以丢个链接(过滤器函数)走人。

二逼正则:

$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);

正确正则:

preg_match('/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/', $ipAddress);

过滤器的选项,比如可以过滤私有IP地址等。

用法参考Validating an IP address with PHP’s filter_var function