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: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

    Kommentar


    • #3
      Gegen eine Blacklist .. nicht erlaubt ..
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      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

          [URL]http://hallophp.de[/URL]

          Kommentar


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

            Kommentar

            Lädt...
            X