当前位置: 首页> 最新文章列表> 如何使用preg_match函数来验证IP地址,保证格式正确且有效?

如何使用preg_match函数来验证IP地址,保证格式正确且有效?

gitbox 2025-08-27
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 这部分与文章内容无关,可以放置一些PHP注释或无关代码</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"欢迎阅读PHP教程!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n--------------------------------------------------\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

如何使用preg_match函数来验证IP地址,保证格式正确且有效?

在PHP中,`preg_match`函数是用来进行正则表达式匹配的一个非常强大的工具。当我们需要验证用户输入的IP地址是否格式正确时,`preg_match`可以快速完成这项任务。本文将详细讲解如何使用它验证IPv4和IPv6地址。

</span><span><span class="hljs-comment">### 1. IPv4地址验证</span></span><span>

IPv4地址由四段数字组成,每段数字的范围是</span><span><span class="hljs-number">0</span></span><span>到</span><span><span class="hljs-number">255</span></span><span>,中间用点号分隔,例如:</span><span><span class="hljs-number">192.168</span></span><span>.</span><span><span class="hljs-number">0.1</span></span><span>。为了确保格式和有效性,我们可以使用如下正则表达式:

```php
</span><span><span class="hljs-variable">$ipv4_pattern</span></span><span> = </span><span><span class="hljs-string">"/^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$/"</span></span><span>;
</span><span><span class="hljs-variable">$ip</span></span><span> = </span><span><span class="hljs-string">"192.168.1.100"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-variable">$ipv4_pattern</span></span><span>, </span><span><span class="hljs-variable">$ip</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IPv4地址格式正确"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IPv4地址格式不正确"</span></span><span>;
}
</span></span>

解释:

  • 25[0-5] 匹配 250-255

  • 2[0-4][0-9] 匹配 200-249

  • 1[0-9]{2} 匹配 100-199

  • [1-9]?[0-9] 匹配 0-99

  • ((...)\.){3}... 确保有四段数字且中间用点分隔

2. IPv6地址验证

IPv6地址格式更加复杂,由8组16进制数字组成,每组用冒号分隔。一个简单的正则表达式示例如下:

<span><span><span class="hljs-variable">$ipv6_pattern</span></span><span> = </span><span><span class="hljs-string">"/^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/"</span></span><span>;
</span><span><span class="hljs-variable">$ip</span></span><span> = </span><span><span class="hljs-string">"2001:0db8:85a3:0000:0000:8a2e:0370:7334"</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-variable">$ipv6_pattern</span></span><span>, </span><span><span class="hljs-variable">$ip</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IPv6地址格式正确"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IPv6地址格式不正确"</span></span><span>;
}
</span></span>

3. 实用小技巧

  1. 如果你希望同时验证IPv4和IPv6,可以使用filter_var函数,它内置了IP验证功能:

<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">filter_var</span></span><span>(</span><span><span class="hljs-variable">$ip</span></span><span>, FILTER_VALIDATE_IP)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IP地址有效"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"IP地址无效"</span></span><span>;
}
</span></span>
  1. 在处理用户输入时,始终注意去除空格和无效字符,避免因前后空格导致匹配失败:

<span><span><span class="hljs-variable">$ip</span></span><span> = </span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$ip</span></span><span>);
</span></span>
  1. 对于大量IP地址的批量验证,可以结合循环和preg_match,高效检查每一个输入。

总结

使用preg_match结合精确的正则表达式,可以验证IP地址格式是否正确且有效。对于IPv4,重点在于数字范围和段数;对于IPv6,重点在于十六进制组和冒号分隔。掌握这些技巧,能够让你的PHP程序在处理网络地址时更加安全和可靠。

<span></span>