Robert Meiser: Verstehe preg_match() nicht ganz

Moin,
ich schlage mich gerade mit preg_match() herum. Ich habe folgende Abfrage um zu überprüfen ob der übergebene Wert ein gültiger Hexwert ist:

preg_match('/[^0-9a-fA-F]/', $hexColor)

Nur weiß ich jetzt nicht, was genau preg_match() zurückgibt, wenn es ein gültiger Hexwert ist. Im PHP Manual steht, dass 1 zurückgegeben wird, in meinem Fall wird aber 0 zurückgegeben, wenn die Zeichenkette nur aus 0-9 und A-F besteht. Ist ein anderes Zeichen enthalten wird 1 zurückgegeben. Irgendwie bin ich jetzt extremst verwirrt und blicke nicht mehr durch, wäre also über eine Aufklärung sehr erfreut.

MfG, Robert Meiser.

  1. Hallo,

    ich schlage mich gerade mit preg_match() herum. Ich habe folgende Abfrage um zu überprüfen ob der übergebene Wert ein gültiger Hexwert ist:

    preg_match('/[^0-9a-fA-F]/', $hexColor)

    Nur weiß ich jetzt nicht, was genau preg_match() zurückgibt, wenn es ein gültiger Hexwert ist. Im PHP Manual steht, dass 1 zurückgegeben wird, in meinem Fall wird aber 0 zurückgegeben, wenn die Zeichenkette nur aus 0-9 und A-F besteht.

    1 steht fuer true (das Muster passt) und 0 fuer false (das Muster passt nicht).

    Probiere es mal so:

    <?php

    $hexcol="#ABC123";
    $regex="/^#([a-f]|\d){6}$/i";

    if(preg_match($regex,$hexcol))
    print "Gültige Hex-Farbe\n";
    else print "Ungültige Hex-Farbe\n";

    ?>

    MfG, Thomas

    1. Hey danke, das klappt ja wunderbar. Was habe ich falsch gemacht, bzw. falsch verstanden? Denn bei mir wurden ja genau die umgekehrten Werte zurückgegeben, wenn es gepasst hat 0, wenn es nicht gepasst hat 1.

      1. Hallo,

        Hey danke, das klappt ja wunderbar. Was habe ich falsch gemacht, bzw. falsch verstanden? Denn bei mir wurden ja genau die umgekehrten Werte zurückgegeben, wenn es gepasst hat 0, wenn es nicht gepasst hat 1.

        Du hast mit ^ die Zeichenklassen negiert ;-).

        BTW: Hier mal noch Versuche fuer weitere Farberkennungen (CSS-like):

        // #RGB oder #RRGGBB
        // $regex="/^#(([a-f]|\d){3}|([a-f]|\d){6})$/i";
        // rgb(r,g,b) oder rgb(r%,g%,b%)
        // $regex="/^rgb[(]\d{1,3}[%]?[,]\d{1,3}[%]?[,]\d{1,3}[%]?[)]$/i";

        MfG, Thomas

        1. Bedeutet ein ^ nicht der Anfang der Zeichenkette? Ich sehe schon, ich muss noch einiges lernen bei RegExp :)

          Danke für die anderen Versuche, werde ich mir speichern, kann man sicher mal brauchen.

          1. Hallo,

            Bedeutet ein ^ nicht der Anfang der Zeichenkette? Ich sehe schon, ich muss noch einiges lernen bei RegExp :)

            Ja, eben am Anfang einer Zeichenkette, aber nicht in [^...].

            MfG, Thomas

          2. Hallo Robert.

            Bedeutet ein ^ nicht der Anfang der Zeichenkette? Ich sehe schon, ich muss noch einiges lernen bei RegExp :)

            "^" Steht normalerweise für den Anfang des Strings, bzw. auch für den Anfang einer Zeile, bei aktiviertem Mehrzeilenmodus (Modifikator - m). Bei Klassen steht er allerdings für die Negation derselben.
            Zusätzlich gibt es noch "\A", das nur für den Anfang des Strings steht.

            MfG _Siro.