Eddie: RegEx, der eine Zahl < 255 findet?

Hallo allerseits,

ich habe leider nichts dazu gefunden, Google war mir keine Hilfe: kann ich mit einem regulären Ausdruck prüfen, ob ein String (bzw. eine Zahl) größer als 255 ist?

Also bei ($a = 256) hätte ich die Zahl gerne als Ergebnis. Keine Ahnung, ob das geht?

Danke euch,
Eddie

  1. Es gibt keinen einzelnen regulären Ausdruck, der das leisten kann. Allerdings könntest Du (parseInt(input) || 0) > 255 verwenden, um zu testen, ob der String, wenn er eine Zahl enthält, einen Wert von über 255 hat.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
  2. ich habe leider nichts dazu gefunden, Google war mir keine Hilfe: kann ich mit einem regulären Ausdruck prüfen, ob ein String (bzw. eine Zahl) größer als 255 ist?
    Also bei ($a = 256) hätte ich die Zahl gerne als Ergebnis. Keine Ahnung, ob das geht?

    muss es ein regulärer ausdruck sein? ich würds recht simpel machen

    regulärer ausdruck liefert zahl (ab 3-stellen), übergibt sie an mathematische funktion die überprüft, ob die zahl > 255 ist

    1. Hallo suit,

      muss es ein regulärer ausdruck sein? ich würds recht simpel machen

      Das Problem ist, dass es sich um ein Array solcher Zahlen handelt (genauer: um RGB-Values). Und ich dachte, ich koennte unter PHP mittels preg_grep auf einen Schlag prüfen, ob ungültige Werte drin sind. Aber das geht dann wohl nicht :-(

      Wenn ihr dafuer sonst eine Idee habt, freue ich mich, ansonsten schreibe ich halt eine Funktion, die das RGB-Array durchlaeuft und einzeln checkt!

      Eddie

      1. Wenn ihr dafuer sonst eine Idee habt, freue ich mich, ansonsten schreibe ich halt eine Funktion, die das RGB-Array durchlaeuft und einzeln checkt!

        musst du nicht zwangsläufig - ggf hilft es auch, das array nach dem wert zu sortieren (notfalls mit einem zweiten pseudoarray mittels multisort array_multisort und dann alles > 255 rauszuwerfen (dann musst du nicht jeden wert einzeln prüfen sondern weist ab einem bestimmt wert, dass nur noch ungülte kommen können und kannst deine schleife die das array abackert dort beenden) - alternativ, rechne die werte von rgb in hex um (dechex() hilft dabei) jede hexadezimalziffer mit mehr als zwei stellen ist per defintion größer als 256

        1. Hallo suit,

          musst du nicht zwangsläufig - ggf hilft es auch, das array nach dem wert zu sortieren (notfalls mit einem zweiten pseudoarray mittels multisort array_multisort und dann alles > 255 rauszuwerfen (dann musst du nicht jeden wert einzeln prüfen sondern weist ab einem bestimmt wert, dass nur noch ungülte kommen können und kannst deine schleife die das array abackert dort beenden) - alternativ, rechne die werte von rgb in hex um (dechex() hilft dabei) jede hexadezimalziffer mit mehr als zwei stellen ist per defintion größer als 256

          Beides sehr interessante Vorschlaege! Fuer meine 1-dimensionalen RGB-Arrays der Länge 3 waere also bspw. folgendes möglich:

          $a = (255, 255, 256);

          return (min($a) < 0 || max($a) > 255);

          oder

          return (strlen(dechex(array_product($a))) > 6);

          Ist natuerlich beides nicht 100% wasserdicht, aber immerhin ;-)

          Eddie

          1. jede hexadezimalziffer mit mehr als zwei stellen ist per defintion größer als 256
            Beides sehr interessante Vorschlaege!

            2-stellige hexadezimalzahlen sind natürlich größer als 255 da xFF exakt 255 entspricht, x100 (dreistellig) 256

            ich bin auf das endprodukt gespannt - aber mit dem 1-dimensionalen array wundert mich jetzt - ich dachte du hast ein mehrdimensionales array - quasi eine "tabelle" mit dezimalen rgb werten ;) die du durchrattern musst - wenns eh nur 3 einträge sind, ist das ja kein aufwand - da ist die verwendete funktion performancemäßig fast egal - oder versteh ich das falch

            1. Hi suit,

              ich bin auf das endprodukt gespannt - aber mit dem 1-dimensionalen array wundert mich jetzt - ich dachte du hast ein mehrdimensionales array - quasi eine "tabelle" mit dezimalen rgb werten ;) die du durchrattern musst - wenns eh nur 3 einträge sind, ist das ja kein aufwand - da ist die verwendete funktion performancemäßig fast egal - oder versteh ich das falch

              Nein, du hast das nicht falsch verstanden! Ich war nur aus reinem Interesse an der einfachsten Loesung interessiert. Und ich wollte mir die Funktion sparen ;-) Mit RegEx waer das echt schoen gewesen!

              Eddie

              1. Nein, du hast das nicht falsch verstanden! Ich war nur aus reinem Interesse an der einfachsten Loesung interessiert. Und ich wollte mir die Funktion sparen ;-) Mit RegEx waer das echt schoen gewesen!

                ja, aber wie lx indirekt sagt ist ein einfach regulärer ausdruck hier nicht möglich, natürlich ist es mit einem regulären ausdruck möglich, aber in diesem fall ist dieser so komplex, dass er in keinem verhältnis zum nutzen steht ;)

  3. Hallo,

    hast Du mal ein Beispiel, in welchem Kontext die Zahlen vorkommen?

    Grüße Basti

  4. Sup!

    Also, eine Zahl größer 255 ist:

    • Jede 4-stellige Zahl (mal angenommen, führende Nullen sind nicht erlaubt)
      oder
    • Jede 3-stellige Zahl, die mit [3-9] anfängt
      oder
    • Jede 3-stellige Zahl der Form 26\d
      oder
    • Jede 3-stellige Zahl der Form 25[6-9]

    Da kann man ja ganz leicht einen RegEx draus machen...

    Ob das sinnvoll ist, sei dahingestellt.

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Hi,

      Also, eine Zahl größer 255 ist:

      • Jede 4-stellige Zahl (mal angenommen, führende Nullen sind nicht erlaubt)
        oder
      • Jede 3-stellige Zahl, die mit [3-9] anfängt
        oder
      • Jede 3-stellige Zahl der Form 26\d
        oder
      • Jede 3-stellige Zahl der Form 25[6-9]

      270 .. 299

      • Jede 3-stellige Zahl der Form 26\d

      muß eher 2[6-9]\d heißen ;-)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Heureka! Es geht also doch!!! Ich lass trotzdem die Finger davon, war aber schoen, euch beim (erfolgreicheren als meinem) Um-die-Ecke-Denken zuzusehen :-) Horizont erfolgreich erweitert, dann aber doch noch Frank Schönmanns Zitat (s.o.) gelesen ;-)

        1. @@Eddie:

          […] dann aber doch noch Frank Schönmanns Zitat (s.o.) gelesen ;-)

          Welches von beiden: das über reguläre Ausdrücke oder das über Idioten? ;-)

          Wobei mich ersteres irgendwie an Zitat 1266 erinnert.

          Live long and prosper,
          Gunnar

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
    2. Sup!

      • Jede 4-stellige Zahl (mal angenommen, führende Nullen sind nicht erlaubt)

      Also quasi jede Zahl \d*[1-9]+\d{3,}

      Gruesse,

      Bio

      --
      Never give up, never surrender!!!
  5. hi!

    ich habe leider nichts dazu gefunden, Google war mir keine Hilfe: kann ich
    mit einem regulären Ausdruck prüfen, ob ein String (bzw. eine Zahl) größer
    als 255 ist?

    Some people, when confronted with a problem, think "I know, I'll use
        regular expressions." Now they have two problems.

    bye, Frank!

    --
    Never argue with an idiot. He will lower you to his level and then
    beat you with experience.