Gustav Gans: Eingabeüberprüfung mit regex

Moin!

Bitte helft mir weiter. Ich möchte überprüfen, ob ein eingegebener Name wirklich nur aus Klein- oder Großbuchstaben plus Leerzeichen besteht, so dass zB. "Kai Uwe" auch die Prüfung bestehen würde.

Dazu kommt, dass auch Doppelpunkte, Accents und Ringe über Buchstaben gültig sein müssen, weil sonst "Jürgen Testmann" oder "Anne Publé" als falsch gewertet werden würden.

Sonderzeichen und Ziffern sollen natürlich _nicht_ vorkommen.

Wenn ich das jetzt teste, was bitte soll ich bei

<?php  
 $wort="Ügitop Huber";  
 if(!preg_match("=^[]+$=i",$wort))  
  {  
   echo "Ungültiges Zeichen in der Zeichenkette";  
  }  
  else  
  {  
   echo "Zeichenkette OK";  
  }  
?>

in die eckigen Klammern schreiben, damit die Überprüfung wie gewünscht funktioniert? Der Besuch geschätzter 50 themenspezifischer Seiten in den letzten 2 Stunden hat mich nicht weitergebracht. =(

Please help!

Gustav Gans

  1. Bitte helft mir weiter. Ich möchte überprüfen, ob ein eingegebener Name wirklich nur aus Klein- oder Großbuchstaben plus Leerzeichen besteht, so dass zB. "Kai Uwe" auch die Prüfung bestehen würde.

    Dazu kommt, dass auch Doppelpunkte, Accents und Ringe über Buchstaben gültig sein müssen, weil sonst "Jürgen Testmann" oder "Anne Publé" als falsch gewertet werden würden.

    Sonderzeichen und Ziffern sollen natürlich _nicht_ vorkommen.

    Wenn ich das jetzt teste, was bitte soll ich bei

    <?php

    $wort="Ügitop Huber";
    if(!preg_match("=[1]+$=i",$wort))
      {
       echo "Ungültiges Zeichen in der Zeichenkette";
      }
      else
      {
       echo "Zeichenkette OK";
      }
    ?>

    
    >   
    > in die eckigen Klammern schreiben, damit die Überprüfung wie gewünscht funktioniert? Der Besuch geschätzter 50 themenspezifischer Seiten in den letzten 2 Stunden hat mich nicht weitergebracht. =(  
      
    Ich zitiere mich jetzt mal nicht selbst - und auch nicht Zawinski ;) aber was hältst du von "Lass es"?  
      
    Du hast ja keine Ahnung, welch g[estörte Namen machen Menschen haben können](http://www.telegraph.co.uk/news/newstopics/howaboutthat/3369609/Teenager-changes-name-to-Captain-Fantastic.html): O'Neil da nichts außergewöhnliches.  
      
    Ich bezweifle zwar, dass es Namen wie die von Bobby Tables wirklich geben wird, aber ich würde nicht kategorisch ausschließen, dass ein Namen kein "Sonderzeichen" enthalten kann. Man muss nur an Namen mit kyrillischen, chinesischen oder griechischen Zeichen denken.  
      
    Also welches Zeichen kannst du mit 100%iger sicherheit aus in einem Namen ausschließen?
    

    1. ↩︎

    1. Hallo Suit!

      Ich zitiere mich jetzt mal nicht selbst - und auch nicht Zawinski ;) aber was hältst du von "Lass es"?
      Du hast ja keine Ahnung, welch gestörte Namen machen Menschen haben können: O'Neil da nichts außergewöhnliches.
      Ich bezweifle zwar, dass es Namen wie die von Bobby Tables wirklich geben wird, aber ich würde nicht kategorisch ausschließen, dass ein Namen kein "Sonderzeichen" enthalten kann. Man muss nur an Namen mit kyrillischen, chinesischen oder griechischen Zeichen denken.
      Also welches Zeichen kannst du mit 100%iger sicherheit aus in einem Namen ausschließen?

      OK, dann möchte ich aber zumindest sicher sein, dass keine Zahlen oder Zeichen wie !, ", §, $, %, &, (, * #, etc. dabei sind. Kennst Du Dich soweit aus, dass Du mir sagen kannst, wie dann die Zeile mit der Überprüfung aussehen muß?

      LG

      Gustav Gans

      1. Also welches Zeichen kannst du mit 100%iger sicherheit aus in einem Namen ausschließen?

        OK, dann möchte ich aber zumindest sicher sein, dass keine Zahlen oder Zeichen wie !, ", §, $, %, &, (, * #, etc. dabei sind.

        Das war eine rethorische Frage.

        Außerdem würde sich Captain Fantastic dann durch deine validierung Fallen - sein Name ist explizt "Captain Fantastic Faster Than Superman Spiderman Batman Wolverine Hulk And The Flash Combined!"

        Kennst Du Dich soweit aus, dass Du mir sagen kannst, wie dann die Zeile mit der Überprüfung aussehen muß?

        /[!"§]/ sollte als Ausdruck reichen - spezielle Steuerzeichen müssen natürlich maskiert werden. Dazu zählt z.B. ? oder *

        Testen kannst du das z.B. dann hier: http://lumadis.be/regex/test_regex.php

        Aber nochmal: imho eine dämliche Idee.

        1. Außerdem würde sich Captain Fantastic dann durch deine validierung Fallen - sein Name ist explizt "Captain Fantastic Faster Than Superman Spiderman Batman Wolverine Hulk And The Flash Combined!"

          na dann heisse ich aber ""

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Außerdem würde sich Captain Fantastic dann durch deine validierung Fallen - sein Name ist explizt "Captain Fantastic Faster Than Superman Spiderman Batman Wolverine Hulk And The Flash Combined!"

            na dann heisse ich aber ""

            Ich glaube kaum, dass irgend ein Standesamt einen Leerstring oder NULL als Namen zulässt ;)

        2. Hi!

          /[!"§]/ sollte als Ausdruck reichen - spezielle Steuerzeichen müssen natürlich maskiert werden. Dazu zählt z.B. ? oder *

          Nein, das fuktioniert nicht. Bei

          <?php  
            $wort="Manfréd&%$§ Hübner";  
            if (preg_match('#^[!"§]$#', $wort))  
              {  
                echo "Ungültiges Zeichen in der Zeichenkette";  
              }  
            else  
              {  
                echo "Zeichenkette OK";  
              }  
          ?>
          

          ist ALLES richtig und bei

          <?php  
            $wort="Manfréd&%$§ Hübner";  
            if (!preg_match('#^[!"§]$#', $wort))  
              {  
                echo "Ungültiges Zeichen in der Zeichenkette";  
              }  
            else  
              {  
                echo "Zeichenkette OK";  
              }  
          ?>
          

          ist ALLES falsch. Anderer Vorschlag, wie ich prüfen kann, dass keine Ziffer und kein Sonderzeichen im namen ist, aber aklles andere erlaubt ist?

          Aber nochmal: imho eine dämliche Idee.

          Das sehe ich nicht so. Mir ist lieber, ein hans Huber schreibt mir "Georg Meier" in ein Formular - das ist zumindest ein Name - und nicht H5&%$16*6f$§.

          MfG

          Gustav gans

          1. Aber nochmal: imho eine dämliche Idee.
            Das sehe ich nicht so. Mir ist lieber, ein hans Huber schreibt mir "Georg Meier" in ein Formular - das ist zumindest ein Name - und nicht H5&%$16*6f$§.

            Wenn es um den bürgerlichen Namen geht (ein Name, der keine Funktion für die Useridentifizierung hat), so ist grösste Liberalität angesagt, denn je mehr du deine Vorstellungen anderen aufzwingst, um so mehr werden dich andere gemäss deinen Vorstellungen betrügen.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
      2. @@Gustav Gans:

        nuqneH

        keine Zahlen

        Bei uns werden Zahlen als Namenszusätze in römischen Zahlzeichen (ergo Buchstaben) angegeben (Hank Williams III), aber ist das überall so?

        BTW, du meintest Ziffern, nicht Zahlen.

        oder Zeichen wie !

        Nutzer könnten das Ausrufezeichen U+0021 anstelle des 'ǃ' U+01C3 latin letter retroflex click in Namen wie Nǃxau verwenden. Also keine gute Idee, das auszuschließen.

        Vermutlich keine gute Idee, _irgendwas_ auszuschließen.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. keine Zahlen

          Bei uns werden Zahlen als Namenszusätze in römischen Zahlzeichen (ergo Buchstaben) angegeben (Hank Williams III), aber ist das überall so?

          4real - aber sie haben sich später für Superman entschieden.

        2. Bei uns werden Zahlen als Namenszusätze in römischen Zahlzeichen (ergo Buchstaben) angegeben (Hank Williams III), aber ist das überall so?

          Tja und was machen wir nur mit dem
          König Alphons dem 4tel-vor-12.

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
  2. Sonderzeichen und Ziffern sollen natürlich _nicht_ vorkommen.

    Wenn ich das jetzt teste, was bitte soll ich bei

    <?php

    $wort="Ügitop Huber";
    if(!preg_match("=[1]+$=i",$wort))
      {
       echo "Ungültiges Zeichen in der Zeichenkette";
      }
      else
      {
       echo "Zeichenkette OK";
      }
    ?>

    
    >   
    > in die eckigen Klammern schreiben, damit die Überprüfung wie gewünscht funktioniert? Der Besuch geschätzter 50 themenspezifischer Seiten in den letzten 2 Stunden hat mich nicht weitergebracht. =(  
      
    [\p{L}\ ]+ in Perl bedeutet letter-like chars plus whitespace  
      
    Ebenso in PHP  
    <http://www.php.net/manual/en/regexp.reference.unicode.php>  
      
    Du solltest Usereingaben vorher noch mit trim bearbeiten.  
      
    mfg Beat
    
    -- 
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    Der Valigator leibt diese Fische
    

    1. ↩︎

    1. [\p{L}\ ]+ in Perl bedeutet letter-like chars plus whitespace

      Das funktioniert aber nur, wenn die unicode properies in PHP Kompiliert sind - ansonsten muss man das Ganze ggf. umgehen und kann erst wieder einen anderen Ausdruck verwenden, wenn man keine Abstriche möchte.

  3. Wie gewohnt ... ich bin zwar nicht der große php freak, aber kenn das ganze drumrumgebabbel hier ... probiers mal mit:

    eregi("^([0-9a-zA-Z])*$", $deinstring)

    ist nur für Zahlen, Klein- und Großbuchstaben OHNE Leerzeichen

    eregi liefert true wenn $deinstring nur diese Zeichen enthält und false falls
    nicht
    mit dem Leerzeichen kann man da bestimmt auch noch was machen

    1. Wie gewohnt ... ich bin zwar nicht der große php freak, aber kenn das ganze drumrumgebabbel hier ... probiers mal mit:

      Meine Antwort war nebst dem logischen Einwand technisch völlig korrekt und funktioniert in meinem Test einwandfrei - auch wenn die Lösung wie gesagt dämlich ist. Auch Beats antwort war technisch völlig korrekt (unter der von mir genannten zu beachtenden Einschränkung).

      eregi("^([0-9a-zA-Z])*$", $deinstring)

      Double^WMulti-FAIL:

      • O'Neil, O'Donnel, Karl-Heinz
      • René
      • eregi ist deprecated
      • eregi ist case-insensitive und trotzdem gibst du Klein- und Großbuchstaben an.

      mfg
      suit

  4. Hi!

    Bitte helft mir weiter. Ich möchte überprüfen, ob ein eingegebener Name wirklich nur aus Klein- oder Großbuchstaben plus Leerzeichen besteht, so dass zB. "Kai Uwe" auch die Prüfung bestehen würde.

    Warum möchtest du das eigentlich? Dass es nicht unbedingt sinnvoll ist, wurde dir ja schon an mehr oder weniger echten und skurilen Beispiel gezeigt. Was aber ist dein konkretes Ziel? Hast du Bedenken, dass irgendwer mit bestimmten Zeichen Unheil anstellt?

    Wenn ich das jetzt teste, was bitte soll ich bei
    in die eckigen Klammern schreiben, damit die Überprüfung wie gewünscht funktioniert?

    Es gibt Ausdrücke, die stehen stellvertretend für diverse Sorten von Zeichen, beispielsweise \w für Word Characters. Die Unicode Character Properties umfassen noch eine Menge mehr Möglichkeiten.

    Lo!

  5. Hello,

    Sonderzeichen und Ziffern sollen natürlich _nicht_ vorkommen.

    Bevor Du mit dem Ganzen anfängst, lege bitte fest, in welcher Codierung sich die Kommunikation abspielen soll. Anderenfalls drehst Du dich nur im Kreis :-)

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de