Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

RegExp für gültige IP-Adresse

Empfohlene Antworten

Veröffentlicht

Hallo,

kann jemand von Euch mir den regulären Ausdruck schicken, mit dem ich eine IP-Adresse auf Gültigkeit prüfen kann? Sitze schon ein wenig an diesem Problem und entdecke immer wieder Lücken in meinem Ausdruck :(

Danke!:

Hallo,

das Problem ist ein Faß ohne Boden, da es zu viele Sonderfälle gibt :D

Ohne Programmlogik wirst du da wohl nicht machen können.

Also am besten an den Punkten trennen und die einzelnen Werte einzeln überprüfen.

Gruß Jaraz

  • Autor

Naja, aber mit Split wollte ich nicht arbeiten. Was passiert, wenn ich folgenden String erhalte? '...... ganz viele davon ...', da braucht mein splitt ja ewig (und vom Speicher wollen wir mal gar nicht reden)...

Ich hab aber inzwischen eine Lösung gefunden (hier ein Codefragment in Perl):


$re_digit = q{((0?\d?\d)|(1\d\d)|(2[01234]\d)|(25[012345]))};

$re_ip = qq{^$re_digit\\.$re_digit\\.$re_digit\\.$re_digit\$};


print "Yes\n" if <> =~ m/$re_ip/o;

Funktioniert wunderbar, trozdem Danke für Deine Hilfe.

Falls es jemand interessieret, wie ich auf die Lösung kam soll er hier mal einen Beitrag reinsetzen.

Jau, hast recht.

Ich dachte immer regexp wären zeitlich aufwendig.

Dem scheint aber nicht so.

kleiner Test: :D


$_="000.255.255.255";

print time."\n";

for($i = 1;$i <= 1000000;$i++){

	$r = 0  if(grep{/^\d+$/and$_<256}split/\./)==4;

}

print time."\n";

for($i = 1;$i <= 1000000;$i++){

	$re_digit = q{((0?\d?\d)|(1\d\d)|(2[0-4]\d)|(25[0-5]))};

	$re_ip = qq{^$re_digit\\.$re_digit\\.$re_digit\\.$re_digit\$};

	$r = 0 if $_ =~ m/$re_ip/o;

}

print time."\n";

Deine 12345 habe ich mal in 0-5 geändert.

Das: "$r = 0" ist nur für die gültigkeit der if Abfragen.

Ich weiss jetzt auch, warum man Perl immer als "write-only" bezeichnet. :bimei

Gruß Jaraz

  • Autor
Original geschrieben von Jaraz Ich dachte immer regexp wären zeitlich aufwendig.

RegEx können schon sehr zeitintensiv werden wenn man sie nicht sauber formuliert. Bei einer schön strukturierten RegEx ist der Zeitvorteil gegenüber anderen Lösungen, wie Du selbst erkannt hast, auf jeden Fall deutlich spürbar.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.