Reg Expressions Fehler

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

  • Reg Expressions Fehler

    Hallo. Ich kenne mich "ein bisschen" mit normalen Regular Expressions aus. D.h. ich habe früher mal etwas damit gearbeitet, allerdings in anderen Programmiersprachen.

    Es geht darum, dass man auf einer .php Seite in ein Input-Feld seinen Namen eingibt. Ich will dabei festlegen, dass der Namen nur aus folgenden Zeichen bestehen darf:
    - a bis z
    - A bis Z
    - 0 bis 9
    - von mir spezifierte "Sonderzeichen", wie z.B.: ` ' _ etc.

    Eine Regular Expression sollte eigentlich dann so aussehen (habe es mit Regexbuddy überprüft, und es stimmt prinzipiell):

    ^[\[\]\`\'\_a-zA-Z0-9]+$

    Wenn ich aber es dann in PHP folgendermaßen versuche:
    PHP-Code:
    if (isset($_POST['submit']))
    {
        
    $text $_POST['text'];
        if (
    ereg("^[\[\]\`\'\_a-zA-Z0-9]+$",$text))
        {
            echo 
    "<br><br>ok<br>";
        }
        else echo 
    "<br><br>NOT ok<br>";
        echo 
    "<br>Input: ".$text;

    kommt IMMER, schnurzpiepegal was ich eingebe, "not ok". Weiss jemand was denn nun daran falsch sein soll ?

    Außerdem bin ich noch nicht sicher (falls es dann mal funktionieren sollte), wie ich genau feststellen soll, ob nun falsche Zeichen verwendet wurden oder nicht. Ich habe bisher das Eingabe-Feld auf a-z sowie 0-9 über die eregi Funktion limitiert, und die wurde nur dann wahr wenn kein falsches Zeichen drin war (Code war: eregi("^[a-z0-9]+$",$_POST['username']) ). Das hatte (bzw. tut es immer noch) funktioniert, aber nun möchte ich beim Inputfeld eben noch zusätzlich Sonderzeichen erlauben...

    MfG

  • #2
    Nun, dann frage ich anders: wie würdet ihr das Problem lösen ? Wie würde der Suchmuster-String aussehen, um nach allen Zeichen a-z, A-Z, 0-9 und dann noch ein paar anderen Zeichen zu suchen ?

    Kommentar


    • #3
      Re: Reg Expressions Fehler

      1. Benutze bitte die preg-Funtkionen statt der ereg-Dinger.
      http://www.php.net/manual/de/ref.pcre.php

      2. Wenn du nur bestimmte Zeichen zulassen willst, dann nutze eine Zeichenklasse, die nur diese enthält: [a-z0-9xyz]
      Wobei xyz für die Sonderzeichen stehen, die du zusätzlich noch erlauben willst.
      Informiere dich auf der genannten Seite, ob diese Sonderzeichen evtl. in RegEx eine Spezialbedeutung haben, du sie also maskieren musst.

      3. Wenn nur diese zeichen vorkommen dürfen sollen, genügt es natürlich nicht, nach dem Vorkommen eines oder mehrerer Zeichen aus dieser Zeichenklasse zu suchen - sondern du musst sicherstellen, dass auch davor und danach nichts anderes kommt. ^ für den Stringanfang und $ für das Stringende helfen dabei.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        merci. so hats dann endlich geklappt:
        PHP-Code:
        if (isset($_POST['submit']))
        {
            
        $text stripslashes($_POST['text']); //wegen magic quotes wurde das von mir erlaubte ' zeichen escaped
            
        preg_match_all("/^[\\[\\]\\`\'\\_\\=\\«\\»a-zA-Z0-9]+$/",$text$ausgabePREG_PATTERN_ORDER);
            if (
        strlen($ausgabe[0][0]) == strlen($text))
            {
                echo 
        "<br>username is ok";
            }
            else echo 
        "<br>username is NOT okay!";
            echo 
        "<br>Input: ".$text;

        MfG

        Kommentar

        Lädt...
        X