Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] preg_match - Sonderzeichen nicht erlauben

Einklappen

Neue Werbung 2019

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

  • [Erledigt] preg_match - Sonderzeichen nicht erlauben

    Hallo,

    ich möchte Zeichen wie !"§$%/()=+ nicht erlauben.

    Mit folgendem Code sollte doch überprüft werden, ob es in der Zeichenkette ein Zeichen außerhalb der Klasse gibt.
    PHP-Code:
    preg_match('/[^a-zA-Z0-9 -_ÄäÜüÖöß]/'$newsite 
    Wenn ich aber z.B. ein Ausrufezeichen eingebe, erhalte ich keine Fehlermeldung.

    Was mache ich falsch?


  • #2
    Zunächst solltest du den Divis - maskieren: \-, sonst wird das als Bereichsangabe interpretiert. Als nächstes ist zu sagen, dass auch das Ausrufezeichen ein reserviertes Zeichen ist und maskiert werden muss: \!.
    Aber mal ehrlich: hast du allen Ernstes vor, alle nicht erlaubten Zeichen aus einem Pool von 65536 möglichen Zeichen herauszufiltern? Du solltest lieber gegen eine Whitelist prüfen, welche Zeichen erlaubt sind.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Gegen eine Blacklist .. nicht erlaubt ..
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Hm.
        Aber ist das nicht eine Whitelist?
        PHP-Code:
        preg_match('/[^ ... ]/'$newsite 
        erlaubt doch alles, was innerhalb von ... steht.
        Und
        PHP-Code:
        preg_match('/^[ ... ]/'$newsite 
        erlaubt doch alles, was außerhalb von ... steht. Oder irre ich mich da?

        Kommentar


        • #5
          Hallo,

          hier mal zwei Links zur Erklärung der Unterschiede deiner beiden Beispiele:

          Der RegExp-Evaluator - RegExp-Tutorial - Zeichenklassen

          Der RegExp-Evaluator - RegExp-Tutorial - Metazeichen

          Zu: Blacklist vs. Whitelist

          Suche nach allen Zeichen, die du erlauben möchtest und negiere dann die Bedingung:

          PHP-Code:
          if (!preg_match('/^[0-9a-z]+$/i'$string)) {
            
          // ungültige Zeichen gefunden

          http://hallophp.de

          Kommentar


          • #6
            Ah. Jetzt verstehe ich es!
            Vielen Dank! Die Links waren sehr hilfreich!

            Kommentar

            Lädt...
            X