borobudur: nur buchstaben und zahlen

Hallo, ich suche eine php-funktion, die mir einen string convertiert. Der string soll danach nur noch aus buchstaben und zahlen bestehen also frei von jeglichen sonderzeichen sein.

Da gibt's sicher eine vordefinierte funktion aber ich finde nicht heraus wie das ding heisst.

Gruss
borobudur

  1. Hallo, ich suche eine php-funktion, die mir einen string convertiert. Der string soll danach nur noch aus buchstaben und zahlen bestehen also frei von jeglichen sonderzeichen sein.

    Da gibt's sicher eine vordefinierte funktion aber ich finde nicht heraus wie das ding heisst.

    Gruss
    borobudur

    theoretisch würd ich sagen mit str_replace(), damit kannst du teile eines strings durch bestimmte dinge ersetzten. allerdings müsstest du dann jegeliches erdenkliche sonderzeichen rausfiltern.

    1. Hello,

      theoretisch würd ich sagen mit str_replace(), damit kannst du teile eines strings durch bestimmte dinge ersetzten. allerdings müsstest du dann jegeliches erdenkliche sonderzeichen rausfiltern.

      Das will er doch auch. Einmal wird man eben die Sonderzeichenliste aufstellen müssen.
      Besser wäre aber ein Positiv-Filter.

      Stapel_1        Filtermenge der erlaubten Zeichen         Stapel_2

      für alle Zeichen von Stapel 1
        schaue, ob das Zeichen in der Menge der erlaubten Zeichen ist
        Wenn ja, schieb es auf Stapel 2
        Wenn nein, Trashcan, Kontrollstapel, Fehlermeldung oder was Dir sonst beliebt.

      Man benötigt dafür die Funktionen

      strlen()
        strpos()

      und eine Forschleife, da es sich ja wohl um einen skalaren Datentyp handeln wird (String)

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Danke Tom, das mit dem stapel habe ich mir auch etwa so vorgestellt aber ich hatte keine lust diese funktion extra zu schreiben. Der Dieter hat mir die lösung gebracht:

        preg_replace("(\W)","",$str);

        Thanks to everybody!

        1. Hello,

          Danke Tom, das mit dem stapel habe ich mir auch etwa so vorgestellt aber ich hatte keine lust diese funktion extra zu schreiben. Der Dieter hat mir die lösung gebracht:

          preg_replace("(\W)","",$str);

          Das ist aber die Negativ-Filter-Lösung.
          Ich bin immer lieber dafür, die Dinge, die erlaubt sein sollen auch explizit festzulegen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo Tom,

            Das ist aber die Negativ-Filter-Lösung.
            Ich bin immer lieber dafür, die Dinge, die erlaubt sein sollen auch explizit festzulegen.

            Das hat nur dann einen Sinn, wenn eine man in einer Negativliste Zeichen uebersehen haben koennte. 'Nur Buchstaben und Zahlen' und \W, also alles was nicht [a-z0-9_] ist, sind aber ganz klar abgegrenzte Mengen.

            Gruß,

            Dieter

            1. Hello,

              Das ist aber die Negativ-Filter-Lösung.
              Ich bin immer lieber dafür, die Dinge, die erlaubt sein sollen auch explizit festzulegen.
              Das hat nur dann einen Sinn, wenn eine man in einer Negativliste Zeichen uebersehen haben koennte. 'Nur Buchstaben und Zahlen' und \W, also alles was nicht [a-z0-9_] ist, sind aber ganz klar abgegrenzte Mengen.

              Es wird aber die Negativ-Menge ersetzt/unterdrückt und nicht die Positiv-Menge weitergereicht.

              Jede Veränderung des Zeichensatzes (im schlimmsten Fall eine einfache Erweiterung) würde eine Sicherheitslücke aufreißen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hallo Tom,

                Jede Veränderung des Zeichensatzes (im schlimmsten Fall eine einfache Erweiterung) würde eine Sicherheitslücke aufreißen.

                Damit stellst Du das ganze System von Regular Expressions in Frage. PCRE-kompatibel ist nunmal PCRE-kompatibel. Zudem, \W ist das Gegenteil von \w, also a-Z0-9_. Es gibt keine Buchstaben zwischen a-z und A-Z und keine Zahlen zwischen 0-9, die nicht in \w enthalten sind, den _ lassen wir mal aussen vor. Ein Aenderung der Zeichensaetze in irgendwelchen Unicode- oder ISO-Tabellen hat damit nicht die geringste Auswirkung.

                Gruß,

                Dieter

                1. Hello Dieter,

                  Jede Veränderung des Zeichensatzes (im schlimmsten Fall eine einfache Erweiterung) würde eine Sicherheitslücke aufreißen.
                  Damit stellst Du das ganze System von Regular Expressions in Frage.

                  nein, tue ich nicht.

                  Wenn Du statt preg_replace() preg_match() benutzt und die gegenwärtige Komplementärmenge zu der von Dir genannten, dann stimmt es wieder. Du hat einfach nicht bis zu Ende gedacht.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Hallo Tom,

                    Zitat aus dem OP:

                    eine php-funktion, die mir einen string convertiert. Der string soll danach nur noch aus buchstaben und zahlen bestehen also frei von jeglichen sonderzeichen sein.

                    Wenn Du statt preg_replace() preg_match() benutzt und die gegenwärtige Komplementärmenge zu der von Dir genannten, dann stimmt es wieder.

                    Du hast einen String #123~abc@-+
                    Du ersetzt mit preg_replace() alles, was nicht a-Z0-9 ist, also #~@-+, uebrig bleibt 123abc, also ein String, der nur aus Zahlen und Buchstaben besteht (das mit dem _ hatte ich ja bereits erwaehnt).
                    Erklaer mir bitte, wie du das mit preg_match(), das ja nichts ersetzt, machen willst und was dabei nicht zu Ende gedacht ist.

                    Gruß,

                    Dieter

                    1. Jungs, seit lieb zueinander, das problemchen ist ja gelöst :-)

                      1. Hallo borobudur,

                        Jungs, seit lieb zueinander, das problemchen ist ja gelöst :-)

                        Wir sind ja lieb, ich betrachte das mehr als fachliche Auseinandersetzung, auch wenn bestimmte Spitzen nicht zu uebersehen sind.
                        Aber es ist nett von dir, diesen Einwurf zu machen.

                        Gruß,

                        Dieter

                        1. Hello,

                          Jungs, seit lieb zueinander, das problemchen ist ja gelöst :-)
                          Wir sind ja lieb, ich betrachte das mehr als fachliche Auseinandersetzung, auch wenn bestimmte Spitzen nicht zu uebersehen sind.

                          Das preg_match() als positiver Algorithmus nicht funktioniert, ist natürlich schade.
                          Da müsste man dann also preg_match_all() für alle erlaubten Zeichen machen und die einzelergebnisse dann wieder zusammenbauen. Das ist dann bestimmt teurer als meine Idee mit den zwei Stapeln. Die stammt ja eigentlich auch nicht von mir, sondern ist mindestens 50 Jahre altes Grundlagenwissen.

                          Harzliche Grüße aus http://www.annerschbarrich.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          Nur selber lernen macht schlau
  2. Hallo borobudur,

    preg_replace() in Verbindung mit \W

    Gruß,

    Dieter