preg_match für IP-Adresse gesucht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_match für IP-Adresse gesucht

    Ich Suche für die Eingabeüberprüfung einen preg_match String für eine eingegebe IP-Adresse.

    0.0.0.0 bis 255.255.255.255

    Schritt 1:
    falsch, wenn mehr oder weniger als vier Zahlen durch einen Punkt getrennt eingegeben wurden. Die jeweiligen Zahlen müssen jeweils im Bereich 0-255 angegeben sein.

    Schritt 2:
    die letzte Position darf die Werte aus dem Zahlenbereich 0-255 haben, oder "0/32", "0/16", oder "0/8".

    Also wäre die Eingabe einer IP-Adresse 12.32.255.0/8 korrekt.

    Ich komme nicht zurecht und habe in keinem Forum eine ähnlich formulierte Problemstellung gefunden.

  • #2
    $ip = preg_replace("!(^0+\.)|(\.0+\.)|(\.0+$)!","0",$ip); //mehr als eine 0 kürzen
    $elements = explode('.',$ip);
    if ($elements[0]<=255 && $elements[1]<=255 && $elements[2]<=255 && ($elements[3]<=255 || strpos($elements[3],'0/')) && preg_match("!([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0\/32)|(0\/16)|(0\/8))!",$ip)) {
    echo 'Gültiges Format';
    } else {
    echo 'Ungültiges Format';
    }

    [Editiert von Sky am 25-12-2001 um 17:58]

    CAT Music Files

    Kommentar


    • #3
      Hm, das mit dem Nullenkürzen passt noch nicht ganz, lass es erstmal weg, bis ich mir was überlegt habe.

      CAT Music Files

      Kommentar


      • #4
        So, mit ner Schleife haben wir's einfacher:
        PHP-Code:
        $elements explode('.',$ip);

        foreach (
        $elements as $single_element) {
        $single_element preg_replace("!0+!","0",$single_element);
        }

        $ip implode('.',$elements);

        if (
        $elements[0]<=255 && $elements[1]<=255 && $elements[2]<=255 && ($elements[3]<=255 || strpos($elements[3],'0/')) && preg_match("!([0-9]{1,3})\.([0- 9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0\/32)|(0\/16)|(0\/8))!",$ip)) {
        echo 
        'Gültiges Format';
        } else {
        echo 
        'Ungültiges Format';


        CAT Music Files

        Kommentar


        • #5
          Danke für die wirklich prompte Antwort - hab länger beim Testen gebraucht.
          Zwischenstand
          1.1.1.3/33, 1.1.1.0/1 werden als gültig ausgewiesen.

          Habe Deinen Code ohne Nullen kürzen verwendet:
          $elements = explode('.',$ip);
          if ($elements[0]<=255 && $elements[1]<=255 && $elements[2]<=255 && ($elements[3]<=255 || strpos($elements[3],'0/')) && preg_match("!([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0\/32)|(0\/16)|(0\/8))!",$ip)) {
          echo 'Gültiges Format';
          } else {
          echo 'Ungültiges Format';
          }

          Kommentar


          • #6
            !^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0\/32)|(0\/16)|(0\/8))$!

            CAT Music Files

            Kommentar


            • #7
              Vielen Dank.

              $elements = explode('.',$ip);
              if ($elements[0]<=255 && $elements[1]<=255 && $elements[2]<=255 && ($elements[3]<=255 || strpos($elements[3],'0/')) && preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0\/32)|(0\/16)|(0\/8))$!",$ip)) {
              echo 'Gültiges Format<br>';
              } else {
              echo 'Ungültiges Format<br>';
              }

              Vielleicht ergibt es sich, daß ich mich irgendwann, irgendwie revanchieren kann.

              Kommentar


              • #8
                Hm, mir fällt gerade auf, dass ich ja gar nicht den Standard-Delimiter / genommen habe --> Die Backslashes vor diesen können weggelassen werden:

                !^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!

                CAT Music Files

                Kommentar

                Lädt...
                X