Heim  >  Artikel  >  Backend-Entwicklung  >  So überprüfen Sie mithilfe von Regex in PHP, ob es sich bei der Eingabe um eine IPv4-Adresse handelt

So überprüfen Sie mithilfe von Regex in PHP, ob es sich bei der Eingabe um eine IPv4-Adresse handelt

WBOY
WBOYOriginal
2023-06-24 09:20:341317Durchsuche

PHP bietet als beliebte serverseitige Programmiersprache einige leistungsstarke Tools zur Überprüfung der Richtigkeit von Eingabedaten. In diesem Artikel konzentrieren wir uns auf die Verwendung regulärer Ausdrücke, um zu überprüfen, ob es sich bei der Eingabe um eine IPv4-Adresse handelt.

Was ist zunächst einmal eine IPv4-Adresse? Eine IPv4-Adresse bezieht sich auf eine 32-Bit-Binärzahl, die normalerweise in vier 8-Bit-Binärzahlen unterteilt, durch „.“ getrennt und in Dezimalform ausgedrückt wird. Beispielsweise ist 127.0.0.1 eine IPv4-Adresse.

Jetzt sehen wir uns an, wie man reguläre Ausdrücke verwendet, um zu überprüfen, ob es sich bei der Eingabe um eine IPv4-Adresse handelt. Hier ist ein einfaches Beispiel für einen regulären Ausdruck:

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

Dieser reguläre Ausdruck besteht aus drei Teilen. Der erste Teil ist ^, der zur Angabe der Startposition des Matches verwendet wird. Der zweite Teil ist (?:[0-9]{1,3}.){3}, was bedeutet, dass eine Kombination aus drei Zahlen und einem dreimal wiederholten Punkt übereinstimmen kann ersten drei Zahlen und Punkte. (?:) gibt eine nicht erfassende Gruppe an, das heißt, sie wird beim Abgleich nicht aufgezeichnet. Der letzte Teil ist [0-9]{1,3}$, was bedeutet, dass er mit der letzten Zahl übereinstimmt, keine weiteren Zeichen danach enthält und mit dieser Zahl endet. ^,用于指定匹配起始位置。第二部分是(?:[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

Allerdings gibt es einige Probleme mit diesem regulären Ausdruck. Es ermöglicht den Abgleich einiger unmöglicher IPv4-Adressen, z. B. der Broadcast-Adresse 256.0.0.0 oder 192.168.1.0/24.

Um dieses Problem zu lösen, müssen wir eine Logik hinzufügen, um zu überprüfen, ob jede Zahl zwischen 0 und 255 liegt. Das Folgende ist ein Beispiel für einen regulären Ausdruck zur Überprüfung einer IPv4-Adresse: 🎜rrreee🎜Dieser reguläre Ausdruck besteht ebenfalls aus drei Teilen. Der erste Teil ist (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)., welcher bedeutet, dass Zahlen übereinstimmen, die mit 25 beginnen, mit 24 beginnen und die zweite Zahl zwischen 0 und 9 liegt, oder mit 0 und 9 beginnen, in allen drei Fällen gefolgt von einem Punkt. Diese Kombination entspricht den ersten drei Zahlen und dem Punkt. 🎜🎜Der zweite Teil ist der erste Teil, der dreimal wiederholt wird. Der letzte Teil ist (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?), was bedeutet passende Zahlen, die mit 25 beginnen, mit 24 beginnen und die zweite Ziffer zwischen 0 und 9 liegt oder mit 0 und 9 beginnen. Diese Kombination stimmt mit der letzten Zahl überein. 🎜🎜Dieser reguläre Ausdruck kann die Gültigkeit einer IPv4-Adresse überprüfen, jede Zahl genau erfassen und sicherstellen, dass jede Zahl zwischen 0 und 255 liegt. 🎜🎜Hier ist ein Beispielcode, der zeigt, wie dieser reguläre Ausdruck zum Überprüfen einer IP-Adresse verwendet wird: 🎜rrreee🎜Im obigen Beispiel haben wir eine isIPv4()-Funktion definiert, um eine IPv4-Adresse zu überprüfen. Wir wandeln die IP-Adresse in einen Zeichenfolgentyp um und gleichen sie mit dem regulären Ausdruck ab. Bei erfolgreicher Übereinstimmung geben wir true zurück, andernfalls false. 🎜🎜In praktischen Anwendungen ist es sehr wichtig, die vom Benutzer eingegebenen Daten zu überprüfen. Die Verwendung regulärer Ausdrücke zur Validierung von IPv4-Adressen ist eine gute Wahl, um schnell und einfach die Richtigkeit von Benutzereingaben zu überprüfen. 🎜

Das obige ist der detaillierte Inhalt vonSo überprüfen Sie mithilfe von Regex in PHP, ob es sich bei der Eingabe um eine IPv4-Adresse handelt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn