Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Durch preg_match gefundene Zeichen mit str_replace ersetzen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Durch preg_match gefundene Zeichen mit str_replace ersetzen

    Hallo, ich suche mit preg_match bestimmte Zeichen in meiner Variable $bemerk, und speichere diese in $unerlaubt (wenn ich das richtig verstanden habe). Danach wollte ich mit str_replace den Inhalt von $unerlaubt durch Leerstring ersetzen. Ich bekomme aber folgende Warnung:
    Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 5 in
    Mein Versuch sieht wie folgt aus:
    PHP-Code:
            if ($bemerk != '') {
                if (
    preg_match('/^[]+$/'$bemerk$unerlaubt)){
                    
    $bemerk str_replace($unerlaubt""$bemerk);    
                }else{ 
                    
    $errors[] = 'Der Bereich Bemerkungen enthält ungültige Zeichen wie / + oder [ ] ';
                }
            } 
    Hat jemand einen Tip, was ich falsch mache?

  • #2
    PHP-Code:
    $text 'schönes Haus an einer Bergstraße.jpg';

    $suchen   = array( 'ä''ö''ü''ß'' ''\\''/' );
    $ersetzen = array( 'ae''oe''ue''ss''_''-''-' );
    $text     str_replace$suchen$ersetzenstrtolower$text ) );
     
    // Gibt aus: schoenes_haus_an_einer_bergstrasse.jpg
    echo $text

    Kommentar


    • #3
      Na da haben sich ja zwei gefunden.

      Kommentar


      • #4
        Wie wärs mit http://php.net/manual/en/function.preg-replace.php ?

        btw. der fehler kommt daher, dass dein pattern falsch ist.

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Na da haben sich ja zwei gedunden.
          Warum? Ist das totaler Käse? Was hättest Du denn Befruchtendes zu bieten?

          Kommentar


          • #6
            Code:
            '/^[]+$/'
            das ist doch mal ein fettes pattern

            Kommentar


            • #7
              Dein Pattern ist Müll, Deine Logik ist Müll (wieso eine Fehlermeldung, wenn gerade ersetzt wurde) und die Antwort hatte null Themenbezug (war
              PHP-Code:
              preg_match('#<div><div >(.*)</div></div>#'$bemerk $match1); 
              (Fullquote) als ich geantwortet hatte. Und was ne Fehlermeldung heißt, könnte man im Zweifel auch einfach mal googlen.

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Dein Pattern ist Müll, Deine Logik ist Müll (wieso eine Fehlermeldung, wenn gerade ersetzt wurde) und die Antwort hatte null Themenbezug (war
                (Fullquote) als ich geantwortet hatte. Und was ne Fehlermeldung heißt, könnte man im Zweifel auch einfach mal googlen.
                Ok, dass Pattern ist Käse. Die Fehlermeldung hatte ich sehrwohl gegoogelt, kam da aber nicht weiter mit dem was ich gefunden hatte. Jetzt, nach dem Hinweis mit dem Pattern, erschließt sich mir die Warnung auch. Die Logik ist für mich aber kein Müll, da ich gerade damit experimentiere und einige Zeichen ersetzen und bei anderen Zeichen eben eine Fehlermeldung haben wollte. Und bei der Antwort geht es doch auch um das Ersetzen von Zeichen, was auch in meiner Frage Thema war.

                Kommentar


                • #9
                  "[" und "]" markieren in Regex-Syntax jedenfalls eine Zeichenklasse, haben also syntaktische Bedeutung. Mehr Infos dazu:

                  - http://de1.php.net/manual/en/regexp....er-classes.php

                  Wenn du checken willst, ob ein Zeichen aus einer Gruppe von Zeichen in einem String enthalten ist, müssen die Zeichen in einer Zeichenklasse stehen. "^" und "$" darfst du nicht verwenden, da du nicht überprüfen willst, ob alle Zeichen falsch sind. Das Pattern müsste grob so aussehen:

                  Code:
                  /[\[\]+]/
                  Möglich (und äquivalent) ist wohl auch:

                  Code:
                  /[][+]/
                  Willst du unerwünschte Zeichen auch durch "" (leerer String) ersetzen, dasselbe Pattern noch mal mit preg_replace nutzen.

                  Kommentar


                  • #10
                    Danke mermshaus, für die gute Erläuterung. Dann habe ich es jetzt richtig verstanden. Hatte mich gestern abend, wie schon geschrieben, nochmal mit dem Pattern befasst und auch schon ein Beispiel erstellt, welches so funktioniert wie ich mir das ausgedacht hatte. Deine Erklärung hat mich jetzt nochmal in meiner Annahme bestätigt.

                    Kommentar


                    • #11
                      Code:
                                  if (preg_match('/^[]+$/', $bemerk, $unerlaubt)){
                                      $bemerk = str_replace($unerlaubt, "", $bemerk);    
                                  }else{ 
                                      $errors[] = 'Der Bereich Bemerkungen enthält ungültige Zeichen wie / + oder [ ] ';
                                  }
                      Die Logik ist für mich aber kein Müll, da ich gerade damit experimentiere und einige Zeichen ersetzen und bei anderen Zeichen eben eine Fehlermeldung haben wollte.
                      Code:
                      [Yoda]
                      Wenn Ausdruck enthält böse Zeichen X,Y,Z
                        Dann ersetze Zeichen
                      Sonst
                        Fehlermeldung: Ausdruck enthält böse Zeichen X,Y,Z
                      [/Yoda]
                      Also diese Logik darfst Du uns gerne mal erklären.

                      Kommentar

                      Lädt...
                      X