Alexander (HH): Formalprüfung von Namen

Beitrag lesen

Moin Moin!

danke für die ausführliche Beschreibung

$nachname=~/^(?:[A-ZÄÖÜ][a-zäöüß]+)[- ])*[A-ZÄÖÜ][a-zäöüß]+/ or die "Schrott im Nachnamen";


> Obiges habe ich nun getestet und bin prompt auf den Bauch gefallen.  
> Irgendwo fehlt eine öffnende Klammer oder ist eine schließende zuviel.  
  
Ja, mag sein. Ist aber hier völlig egal. Das Ding ist nicht nur zufällig syntaktisch kaputt (Asche auf mein Haupt), sondern vor allem ist es logisch kaputt.  
  

> Da ich aber mit der obigen Syntax noch nicht vertraut bin, weiß ich nicht was wo zu ändern ist.  
> Ich wäre dankbar für einen Tipp!  
  
Du bekommst sogar eine ganze Latte Tipps:  
  
1\. Lies mein Posting nochmal gründlich.  
2\. Lies es nochmal.  
3\. Lies die von [Gunnar](https://forum.selfhtml.org/?t=212032&m=1447772) verlinkte [Empfehlung zum Umgang mit Namen](http://www.w3.org/International/questions/qa-personal-names) oder notfalls [seine unvollendete Übersetzung](http://dev.bittersmann.de/International/questions/qa-personal-names.de.php).  
4\. Lies die Empfehlung nochmal.  
  
Jetzt beurteile Deine Chancen, nur die paar wenigen Abweichungen von "Fritz Schmidt", die Gunnar und ich gepostet haben, in ein einziges oder einige wenige Muster zu pressen. Sie ist durchaus größer als Null, aber alles andere als trivial.  
  
Erweitere das auf den Rest der Welt. Beobachte, wie Deine Chancen ballistisch gegen Null gehen.  
  
Ja, das klingt gerade fürchterlich nach Arschloch. Leider sind Namen aber dermaßen übel kompliziert, dass Du kaum eine Chance hast. Für E-Mail-Adressen gibt es einheitliche Regeln, die man in Code pressen kann. Gut, [ein fünf Kilobyte(!) großer regulärer Ausdruck](http://www.cpan.org/authors/Tom_Christiansen/scripts/ckaddr.gz) macht weder Menschen noch Maschinen Spaß, aber wenigstens könntest Du theoretisch prüfen, ob die E-Mail-Adresse syntaktisch ok ist. [Validiert](http://blog.selfhtml.org/2007/10/30/validierung-von-email-adressen/) hast Du sie damit immer noch nicht. Für Namen gibt es nicht einmal einen einheitlichen, konstanten Regelsatz.  
  
Du hast die Wahl, dich an den W3C-Empfehlungen zu orientieren, auf die Gefahr hin, dass Du etwas Schrott in der DB hast. Oder Du denkst Dir einen einenen Regelsatz aus, mit dem Du die Namensvielfalt einschränkst und ab und zu einen Kunden vergraulst. Schrott wirst Du auch da in die DB bekommen.  
  
Und als letzter Tipp: Lies dich in reguläre Ausdrücke ein. Sie sind definitiv kein Allheilmittel, falsch angewendet machen sie mehr Probleme als sie lösen. Aber oft machen sie das Leben deutlich leichter. Viele Sprachen haben die RE-Syntax von Perl geklaut (oft stumpf über die PCRE-Library). Deswegen halte ich es für sinnvoll, bei Perl anzufangen:  
  
[perlretut](http://perldoc.perl.org/perlretut.html), [perlre](http://perldoc.perl.org/perlre.html), [perlreref](http://perldoc.perl.org/perlreref.html), [perlrebackslash](http://perldoc.perl.org/perlrebackslash.html), [perlrecharclass](http://perldoc.perl.org/perlrecharclass.html)  
  
In Perl ist die RE-Syntax direkt in Perl eingebettet. Wenn man sich mit PCRE herumschlagen muß, muß man oft die RE zur Laufzeit als String an den RE-Compiler übergeben. Dann muß z.B. in Java und PHP für jeden Backslash, den die RE-Engine sehen soll, ein weiterer hinzugefügt werden. [PHP braucht offenbar zusätzlich noch die Slashes](http://php.net/manual/de/function.preg-match.php), die in Perl eine RE kennzeichnen, anders als Java. Keine Ahnung, was die PHP-Erfinder da wieder geraucht haben. Java [kommt ohne diesen Unfug aus](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html).  
  
Alexander

-- 
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".