RegExp: String darf nur bestimmte Zeichen enthalten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • RegExp: String darf nur bestimmte Zeichen enthalten

    Iwie steige ich bei diesem ganzen RegExp-Kram immer nicht durch. Wahrscheinlich weil ich immernoch nach einem System dahinter suche, was vermutlich gar nicht existiert. *Schulterzuck*
    Ich habe einen String, dieser darf nur bestimmte Zeichen (große/kleine Buchstaben, Zahlen und einige bestimmte Sonderzeichen) enthalten und außerdem eine bestimmte Länge nicht überschreiten. Da der String aber vom User eingegeben wird, muss ich das natürlich überprüfen.
    Die RegExp müsste meiner Meinung nach dann so aussehen: ([A-Za-z0-9!#$%&'*+/=?_-]{1,40})
    Min 1 und Max 40 Zeichen lang und alle Zeichen zwischen den eckigen Klammern erlaubt.
    Hab ich das wenigstens schon mal richtig erkannt?

    Nächstes Problem: Womit prüfe ich das? Das einzige, was ich gefunden habe, und das wird immer wieder an allen Stellen dafür empfohlen, ist preg_match.
    Was ich daran nicht verstehe: preg_match würde mir doch bei einem solchen String "Test123§;-TästtesT" ein true (bzw) zurück liefern, denn der String enthält ja gültige Zeichen, aber eben auch ein paar ungültige (§;ä), nur würden ihn die Ungültigen nicht stören.
    Man könnte das natürlich erschlagen, indem man auf Blacklist prüft. Also eine Liste mit ungültigen Zeichen erstellt, und dann schaut ob eins davon drin ist. Aber die Wahrscheinlichkeit dabei eins zu übersehen, ist mir ehrlich gesagt zu groß.

    TIA
    Look
  • Ich denke die Lösung für dein Problem ist relativ einfach:
    Du kannst die unerwünschten Zeichen einfach ausschließen, indem du in einem Regex den Anfang und das Ende deines Strings mit angibst. Außerdem solltest du die Sonderzeichen, die eine besondere Bedeutung bei regulären Ausdrücken haben, maskieren.

    Quellcode

    1. $regex = '/^[A-Za-z0-9!#\$%&\'\*\+\/=\?_-]{1,40}$/';

    Und die Prüfung mittels preg_match() ist schon richtig. Ich denke, sie wird nach der Anpassung des Regulären Ausdrucks bei dir mehr Sinn ergeben.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Danke, scheint zu funktionieren. Zumindest macht dieses kleine Script hier was es soll:

    Quellcode

    1. <?php
    2. $text = 'AbcDe-_=fGhkl%!;pQrsT';
    3. $preg = preg_match("/^[A-Za-z0-9!#%&=_-]{1,40}$/", $text);
    4. var_dump ($preg);
    5. if (!$preg) {
    6. echo 'ungültig';
    7. } else {
    8. echo 'gültig';
    9. }
    10. ?>
    Alles anzeigen

    Dann will ich das mal seinem eigentlichen Bestimmungszweck zuführen, und hoffen, dass es da auch läuft :)