Maison  >  Article  >  développement back-end  >  Comment vérifier si l'entrée est une adresse IPv4 en utilisant regex en PHP

Comment vérifier si l'entrée est une adresse IPv4 en utilisant regex en PHP

WBOY
WBOYoriginal
2023-06-24 09:20:341313parcourir

PHP, en tant que langage de programmation côté serveur populaire, fournit des outils puissants pour vérifier l'exactitude des données d'entrée. Dans cet article, nous nous concentrerons sur la façon d'utiliser des expressions régulières pour vérifier si l'entrée est une adresse IPv4.

Tout d’abord, qu’est-ce qu’une adresse IPv4 ? Une adresse IPv4 fait référence à un nombre binaire de 32 bits, généralement divisé en quatre nombres binaires de 8 bits, séparés par « . » et exprimé sous forme décimale. Par exemple, 127.0.0.1 est une adresse IPv4.

Voyons maintenant comment utiliser des expressions régulières pour vérifier si l'entrée est une adresse IPv4. Voici un exemple d'expression régulière de base :

/^(?:[0-9]{1,3}.){3}[0-9]{1,3}$/

Cette expression régulière se compose de trois parties. La première partie est ^, qui est utilisée pour spécifier la position de départ du match. La deuxième partie est (?:[0-9]{1,3}.){3}, ce qui signifie faire correspondre une combinaison de trois nombres et un point répété trois fois. Cette combinaison peut correspondre au. trois premiers nombres et points. (?:) indique un groupe qui ne capture pas, c'est-à-dire qu'il ne sera pas enregistré lors de la correspondance. La dernière partie est [0-9]{1,3}$, ce qui signifie correspondre au dernier numéro, sans aucun autre caractère après, et se terminer par ce numéro. ^,用于指定匹配起始位置。第二部分是(?:[0-9]{1,3}.){3},表示匹配三个数字和一个点重复三次的组合,这个组合可以匹配前三个数字和点。(?:)表示非捕获组,也就是匹配时不会被记录下来。最后一部分是[0-9]{1,3}$,表示匹配最后一个数字,后面没有其他字符,并以这个数字结尾。

但是,这个正则表达式还有一些问题。它允许匹配一些不可能的IPv4地址,例如256.0.0.0或者192.168.1.0/24的广播地址。

为了解决这个问题,我们需要增加一些逻辑来验证每个数字是否在0~255之间。以下是一个校验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]?)$/

这个正则表达式也包括三个部分。第一部分是(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).,表示匹配以25开头、以24开头且第二个数字在0~9之间、或以0~9开头的数字,这三种情况下后面紧跟着一个点。这个组合会匹配前三个数字和点。

第二部分是第一部分重复三次。最后一个部分是(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?),表示匹配以25开头、以24开头且第二个数字在0~9之间、或以0~9开头的数字。这个组合会匹配最后一个数字。

这个正则表达式能够验证IPv4地址的有效性,精确地捕获每个数字,并确保每个数字在0~255之间。

下面是一个示例代码,演示如何使用这个正则表达式来检查一个IP地址:

function isIPv4($ip) {
  // 强制类型转换确保$ip为字符串类型
  $ip = (string)$ip;
  
  // 匹配IPv4地址
  $pattern = '/^((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]?)$/';
  
  return preg_match($pattern, $ip);
}

// 测试验证
var_dump(isIPv4('127.0.0.1')); // true
var_dump(isIPv4('256.0.0.0')); // false

在上述示例中,我们定义了一个isIPv4()函数来验证一个IPv4地址。我们将IP地址强制转换为字符串类型,并将其与正则表达式进行匹配,如果匹配成功,则返回true,否则返回false

Cependant, cette expression régulière pose quelques problèmes. Il permet de faire correspondre certaines adresses IPv4 impossibles, comme l'adresse de diffusion 256.0.0.0 ou 192.168.1.0/24.

Pour résoudre ce problème, nous devons ajouter un peu de logique pour vérifier si chaque nombre est compris entre 0 et 255. Voici un exemple d'expression régulière pour vérifier une adresse IPv4 : 🎜rrreee🎜Cette expression régulière comprend également trois parties. La première partie est (25[0-5]|2[0-4][0-9][01]?[0-9][0-9]?)., qui signifie faire correspondre des nombres commençant par 25, commençant par 24 et le deuxième nombre étant compris entre 0 et 9, ou commençant par 0 et 9, dans les trois cas suivis d'un point. Cette combinaison correspondra aux trois premiers chiffres et au point. 🎜🎜La deuxième partie est la première partie répétée trois fois. La dernière partie est (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?), ce qui signifie Correspondance des nombres commençant par 25, commençant par 24 et le deuxième chiffre est compris entre 0 et 9, ou commençant par 0 et 9. Cette combinaison correspondra au dernier numéro. 🎜🎜Cette expression régulière peut vérifier la validité d'une adresse IPv4, capturer chaque numéro avec précision et garantir que chaque numéro est compris entre 0 et 255. 🎜🎜Voici un exemple de code qui montre comment utiliser cette expression régulière pour vérifier une adresse IP : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons défini une fonction isIPv4() pour vérifier une adresse IPv4. Nous convertissons l'adresse IP en type chaîne et la comparons à l'expression régulière, renvoyant true si la correspondance est réussie, sinon false. 🎜🎜Dans les applications pratiques, il est très important de vérifier les données saisies par l'utilisateur. L’utilisation d’expressions régulières pour valider les adresses IPv4 constitue un bon choix pour vérifier rapidement et facilement l’exactitude des saisies utilisateur. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn