martin22: Bei Eingabe erlaubte Zeichen eingränzen

Hallo miteinander

Möchte mich (wieder einmal) an das Forum bzw an euch wenden um mir bei einem Programmierungsproblem zu helfen.

Also: Ich bin gerade dabei eine kleine Community aufzustellen bei der man sich auch registrieren kann (logisch). Ich möchte aber als Nicknamen aber nur Kleinbuchstaben ohne Umlaute oder Sonderzeichen und Zahlen erlauben.

Ich hab mich natürlich mittels Google natürlich schon durch etliche Seiten gekämpft und dabei hab ich 'ereg' gefunden aber wenn ich hier als Bedingung [a-z0-9] eingebe werden auch Umlaute wie ö ä ü etc akzeptiert.

Bin ich dabei mit ereg überhaupt richtig unterwegs? Gibt es vielleicht auch eine andere einfachere Methode um das zu kontrolieren? Vielleicht eine string Funktion?

Ich bitte euch mir auch bei diesem Problem zu helfen. Danke.

Mfg Martin

  1. Ich möchte aber als Nicknamen aber nur Kleinbuchstaben ohne Umlaute oder Sonderzeichen und Zahlen erlauben.

    Was hast Du gegen Umlaute? Wieso erlaubst Du das hässliche r?

    Ich hab mich natürlich mittels Google natürlich schon durch etliche Seiten gekämpft und dabei hab ich 'ereg' gefunden aber wenn ich hier als Bedingung [a-z0-9] eingebe werden auch Umlaute wie ö ä ü etc akzeptiert.

    Dann gib das Alphabet doch ohne Abkürzung ein, soviele Buchstaben sind das nun auch nicht.

    1. Also ich habe nichts gegen Umlaute aber da diese Community international wird speziell auch richtung Osten möchte ich vermeiden das dort jemand zeichen eingibt die wir bzw unsere Browser dann nicht korrekt darstellen.

      und die Kleinbuchstaben deshalb weil damit die Frage geklärt werden kann ob es einen unterschied macht wenn ich mich mit martin oder Martin registriere bzw anmelden möchte.

      sprich mein Anliegen ist nur auf eine möglichst einfache Userbedienung ausgerichtet.

      Aber danke für deine Ideen werd mir mal preg_match zu Gemüte führen.

      Habe ich das korrekt verstanden das ich statt [a-z] auch [abcdef] eingeben kann?

      Martin

      1. Also ich habe nichts gegen Umlaute aber da diese Community international wird speziell auch richtung Osten möchte ich vermeiden das dort jemand zeichen eingibt die wir bzw unsere Browser dann nicht korrekt darstellen.

        Kyrillische Zeichen werden sehr gut von Browsern dargestellt, besser jedenfalls als asiatische, die dann doch etwas umfangreicher sind.

        sprich mein Anliegen ist nur auf eine möglichst einfache Userbedienung ausgerichtet.

        Bisweilen wird Einfachheit zur Gängelei. Wenn Du schon den kyrillischen Schriftraum explizit mit einbeziehen willst, solltest Du auch ein kleines Maß an Personifizierung zulassen. Außerdem sieht es gut aus, sowas gibt es noch viel zu selten.
        Benutze im Formular accept-charset="utf-8" und liefere die Seiten auch als utf-8 aus, dann sollte es keine großartigen Probleme geben.

        Habe ich das korrekt verstanden das ich statt [a-z] auch [abcdef] eingeben kann?

        Ja, vergiss aber nicht, dass Du den kompletten Satz vergleichst, von Anfang (^) bis Ende ($), so wie es Philipp beschrieben hat.

        1. Das ich bei der Nickwahl die kyrillischen Zeichen ausschließe war nicht unbedingt meine Idee - die ist direkt von meinen Kollegen in Ungarn gekommen die mir dabei helfen.

          Benutze im Formular accept-charset="utf-8" und liefere die Seiten auch als utf-8 aus, dann sollte es keine großartigen Probleme geben.

          aha. das accept schreib ich dann also direkt ins form tag und wie liefere ich die Seiten als utf-8 aus?

          Ich hab bereits in die entsprechenden Seiten den entsprechenden ISO code und lang=hu eingegeben - reicht das noch nicht?

          Ja, vergiss aber nicht, dass Du den kompletten Satz vergleichst, von Anfang (^) bis Ende ($), so wie es Philipp beschrieben hat.

          Ok werds mal ausprobieren obs dann funkt. Danke

          Mfg Martin

          1. Benutze im Formular accept-charset="utf-8" und liefere die Seiten auch als utf-8 aus, dann sollte es keine großartigen Probleme geben.

            aha. das accept schreib ich dann also direkt ins form tag und wie liefere ich die Seiten als utf-8 aus?

            Zum Beispiel mit 'header("Content-Type: text/html; charset=utf-8");' im PHP-Skript oder der Zeile 'AddDefaultCharset utf-8' (http://httpd.apache.org/docs-2.0/mod/core.html#adddefaultcharset) bzw 'AddCharset utf-8 text/html application/x-httpd-php' (http://httpd.apache.org/docs-2.0/mod/mod_mime.html#addcharset) in der Konfiguration Deines Apaches (auch .htaccess).
            Überprüfe, ob dieser Zusatz auch im Browser ankommt. In der Regel lässt sich das mit der "Eigenschaften"-Anzeige einer Seite machen.

            Beim Ausgeben von PHP-Variablen sollte man sowieso immer htmlentities() oder htmlspecialchars() verwenden, um das Einschmuggeln von HTML- oder Javascript-Code zu verhindern. Du hast die Wahl zwischen htmlentities() mit "utf-8" als drittem Parameter oder htmlspecialchars(). htmlspecialchars() ist etwas einfacher, weil keine Zusatzparameter anzugeben sind, allerdings ist dann die oben genannte Content-Type-Angabe zwingend erforderlich, bei htmlentities() wäre sie optional.

            Benutzt Du eine Datenbank, solltest Du in ihrer Anleitung schauen, ob sie sich auf utf-8 explizit umstellen lässt. Es geht zwar auch ohne, allerdings könnte es dann merkwürdige Sortierreihenfolgen geben.

            Beim Schreiben von Text im HTML-Quellcode musst Du lediglich darauf achten, dass Du keine Sonderzeichen, grob gesagt jene, wofür es HTML-Maskierungen gibt, eintippst, wenn Du keinen Unicode-fähigen Editor benutzt. Also nicht ä, sondern ä.
            Hast Du einen Unicode-fähigen Editor, brauchst Du Dir auch darum keine Gedanken zu machen und musst lediglich als Speicherformat utf-8 angeben (auch hier: Content-Type zwingend erforderlich, ansonsten optional).

            Ich hab bereits in die entsprechenden Seiten den entsprechenden ISO code und lang=hu eingegeben - reicht das noch nicht?

            Welchen der Tausenden ISO-Codes Du meinst, weiß ich nicht. Die Angabe der Sprache alleine besagt jedenfalls noch nicht, welche Kodierungstabelle genutzt wird, um aus den Bytes der Dateien Schriftzeichen auf den Bildschirm zu malen.

            1. Ok danke für deine hilfe. werd mich gleich daran machen und deine Vorschläge je nach Notwendigkeit in die Tat umsetzen.

              Mfg Martin

      2. hi,

        und die Kleinbuchstaben deshalb weil damit die Frage geklärt werden kann ob es einen unterschied macht wenn ich mich mit martin oder Martin registriere bzw anmelden möchte.

        dass sich kein 'martin' registrieren kann, wenn es bereits einen 'Martin' gibt, ist ja OK - aber dafür solltest du anders sorgen, in dem du z.b. den usernamen nur für nötige vergleiche in kleinbuchstaben umwandelst o.ä., und nicht generell.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Halihallo martin22

    Also: Ich bin gerade dabei eine kleine Community aufzustellen bei der man sich auch registrieren kann (logisch). Ich möchte aber als Nicknamen aber nur Kleinbuchstaben ohne Umlaute oder Sonderzeichen und Zahlen erlauben.

    Genauso wie Geistiger Hohlraum sehe ich diese Einschränkungen nicht
    ein. Besonders warum nur Kleinbuchstaben akzeptiert werden sollen...

    Ich hab mich natürlich mittels Google natürlich schon durch etliche Seiten gekämpft und dabei hab ich 'ereg' gefunden aber wenn ich hier als Bedingung [a-z0-9] eingebe werden auch Umlaute wie ö ä ü etc akzeptiert.

    Ich empfehle preg_match.

    Bin ich dabei mit ereg überhaupt richtig unterwegs? Gibt es vielleicht auch eine andere einfachere Methode um das zu kontrolieren? Vielleicht eine string Funktion?

    Natürlich geht es auch damit, jedoch bist du mit preg_match auf der
    besseren und schnelleren Seite.

    if (preg_match('/[1]+$/', $string)) {
      echo('OK');
    } else {
      echo('NOK');
    }

    Viele Grüsse

    Philipp


    1. a-z0-9 ↩︎