emaibi: Form auswetung

Hallo,

Wie kann ich z.b. in der Auswertung für einen GB eintrag jede Gleichen Zeichen auf 2 Reduzieren. Wenn zum Beispiel einer einen Eintrag mit 10 Fgragezeichen macht, das die dann auf 2 reduziert werden?
Ich danke im Voraus
mfg

  1. helft mir doch bitte!

    1. hallo

      helft mir doch bitte!

      also wenn ich ehrlich sein soll, dann such dir andere user, die dein gästebuch benutzen, weil das gleich einer zensur,
      wenn ich nicht ehrlich sein soll sondern höflich, dann versuch es doch mal mit regulären ausdrücken.

      gruss

      --
      no strict;
      no warnings;
      Selbstcode: (_*_) ^_^ ( . ) ( . ) :-(bla)
      1. also wenn ich ehrlich sein soll, dann such dir andere user,

        die wollen nicht hören..

    2. Hallo,

      helft mir doch bitte!

      Ich war bereits am tüfteln, aber ob ich die Lösung (wenn ich denn eine finde) bei deiner Drängelei überhaupt noch poste, muss ich mir nochmal schwer überlegen ...

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  2. Geht mit regulären Ausdrücken.. ~?{2,)~ oder so ähnlich..

    Lies dir diesen Link durch, dann weist du es.
    http://tut.php-q.net/regex.html

  3. Hallo,

    Auch wenn emaibi gedrängelt hat möchte ich die Frage nicht unbeantwortet ins Archiv wandern lassen:

    Wie kann ich z.b. in der Auswertung für einen GB eintrag jede Gleichen Zeichen auf 2 Reduzieren. Wenn zum Beispiel einer einen Eintrag mit 10 Fgragezeichen macht, das die dann auf 2 reduziert werden?

    Du willst mehr als zwei aufeinanderfolgende, gleiche Zeichen durch zwei Zeichen davon ersetzen. Drei oder mehr gleiche Zeichen kannst du mit diesem regulären Ausdruck finden:
      /((.)\2{2,})/
    Erklärungen:
    /     Anfangsdelimiter
    (     Beginn des Bereiches um alle zusammengehörenden Zeichen in $1 bzw. \1 zu speichern
    (.)   trifft auf jedes Zeichen und speichert den Treffer in $2 bzw. \2
    \2    Rückreferenz auf das in \2 gespeicherte Zeichen[1]
    {2,}  zwei oder mehr Zeichen von dem in \2 gespeicherten
    )     Ende des Bereiches der zusammengehörenden Zeichen
    /     Enddelimiter

    [1] wenn der reguläre Ausdruck innerhalb von doppelten Anführungszeichen steht, muss der Backslash mit einem zweiten Backslash maskiert werden.

    Um diese in $1 gespeicherte Zeichenkette durch nur zwei Zeichen zu ersetzen eignet sich die Funktion preg_replace_callback (->http://de3.php.net/preg_replace_callback). Diese Funktion erwartet einen regulären Ausdruck (s.o.), eine Callback-Funktion (s.u.) und eben den zu bearbeitenden String.

    Mit dem zweiten Parameter wird eine Callback-Funktion (->http://de3.php.net/manual/de/language.pseudo-types.php#language.types.callback) übergeben, wobei dieser Funktion als Parameter die Treffer im regulären Ausdruck als Array übergeben werden (wobei in $array[0] der komplette Treffer ist und in $array[1] die erste Referenz (entspricht $1), in $array[2] die zweite, usw.). Das was die Funktion dann zurückgibt wird dann für das was auf den reg. Ausdruck "matched", in den String eingesetzt. Für deinen Zweck brauchst du eine Funktion die den ganzen Treffer nimmt und nur zwei Zeichen davon zurückgibt, was sich am einfachsten mit substr (->http://www.php.net/substr) lösen lässt.

    Zusammen sieht dass dann so aus:
      function zweizeichen($m){
        return substr($m[1],0,2);
      }
      echo preg_replace_callback('/((.)\2{2,})/',"zweizeichen",$str);

    wenn man das ganze dann mit
      $str = 'text!!!!!!!!!!111111';
    als $str aufruft kommt dabei das raus:
      text!!11

    Inwiefern das ganze jetzt sinnvoll sein mag, sei jetzt mal dahingestellt, aber vielleicht hilft das jemandem ein ähnliches Problem zu lösen :-)

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|