Archiv verlassen und diese Seite im Standarddesign anzeigen : regulärer Ausdruck zum Validieren von Nachnamen
Hallo,
möchte einen Nachname matchen.
Ich benutze php5.
Das ist der Ausdruck den ich bisher habe und der auch funktioniert:
/^\p{Lu}[\p{Ll}]+[-| ]{0,1}$/uErklärung:
- ^\p{Lu} => Ein String der mit einem Großbuchstaben (auch Unicode (zb. Á)) beginnt
- [\p{Ll}]+ => dann mit mind. einem Kleinbuchstabe weiter geht
- [-| ]{0,1} => mit 0 oder 1 '-' oder ' ' endet
- Modifier: u => mit Unicode-Support
Ein '-' bzw. ' ' macht aber nur Sinn wenn dann der komplette regex
/\p{Lu}[\p{Ll}]+/uwieder matcht.
Kann ich das irgendwie in einem reg. Ausdruck ausdrücken?
Ich meine sowas in der Art:
1. Suche eine Nachnamen (beginnt mit Großbuchstaben, dann bel. viele Kleinbuchstaben).
2. Folgt darauf ein '-' oder ' ' dann such erneut einen Nachnamen
3. (2.) bel. wdh.
Firefall
19.02.2009, 22:48
Ich verstehe diese Syntax nicht, aber die Logik geht wie folgt: Zuerst kommt dein Pattern für den Namen. Anschliessend machst du ne neue Gruppierung (Normalerweise durch Einsatz von Klammern). Da rein schreibst du einen Ausdruck, der '-' oder ' ' matcht und darauf folgt wieder dein Pattern vom Anfang. Dann legst du fest, dass diese Gruppe beliebig oft vorkommen kann, das macht man für gewöhnlich mit *. Also für mich wäre das so:
[A-Z][a-z]+((-| )[A-Z][a-z]+)*
EDIT: Jetzt habe ich deine Syntax durchschaut.
/^\p{Lu}(\p{Ll})+((-| )\p{Lu}(\p{Ll})+)*$/u
Müsste klappen.
Interessehalber: Matcht der auch z.B. O'Neill? :)
Firefall
20.02.2009, 14:17
Interessehalber: Matcht der auch z.B. O'Neill? :)
Nö. ' dürfte kein Grossbuchstabe sein ;)
/^(\p{Lu}(\p{Ll})+([-| ]\p{Lu}\p{Ll})*)|([a-z]+ (\p{Lu}(\p{Ll})+))|(O´[A-Z][a-z]+)$/u
matcht z.b.:
Özmir
von Baden
zu Baden
O´Neill
Warum ´ und nicht ` oder ' ? Letzteres wäre wohl korrekt, aber wenn du Nutzereingaben verarbeitest, kann es offensichtlich passieren, dass dir alle 3 Varianten untergeschoben werden.
Schaffst du auch Abū ‘Alī al-Ḥusayn ibn ‘Abd Allāh ibn Sīnā Balkhi' (http://en.wikipedia.org/wiki/Ibn_Sina)? Was auch immer da als Familienname zu sehen ist ;) Also ich könnte mir vorstellen das zumindest das "al-" (mit Bindestrich) Teil einer tatsächlichen Eingabe sein kann. Ich bezweifle, dass ein Regex präzise alle Möglichkeiten erfassen kann.
Manni the Dark
21.02.2009, 11:30
Mir ist sowieso nicht klar, warum ein Nachname validiert werden muss. Des Weiteren wird eine solche Validierung schwierig, wenn du wirklich alle Eigenheiten aus allen möglichen Kulturen berücksichtigen musst. Und es ist ziemlich bitter für einen User, wenn er sich mit seinem richtigen Nachnamen nicht anmelden kann, weil der angeblich ungültig ist. Zumal du auch so falsche Eingaben nicht vermeiden kannst (Ich kann ja auch "Autobahn" als Nachname angeben).
Mach es lieber so, dass du halt nur Buchstaben, Leerzeichen und ein paar Sonderzeichen wie - oder ' erlaubst, egal in welcher Reinfolge.
eViL_oNe
23.02.2009, 00:15
Mir ist sowieso nicht klar, warum ein Nachname validiert werden muss. Des Weiteren wird eine solche Validierung schwierig, wenn du wirklich alle Eigenheiten aus allen möglichen Kulturen berücksichtigen musst. Und es ist ziemlich bitter für einen User, wenn er sich mit seinem richtigen Nachnamen nicht anmelden kann, weil der angeblich ungültig ist. Zumal du auch so falsche Eingaben nicht vermeiden kannst (Ich kann ja auch "Autobahn" als Nachname angeben).
Mach es lieber so, dass du halt nur Buchstaben, Leerzeichen und ein paar Sonderzeichen wie - oder ' erlaubst, egal in welcher Reinfolge.
schön gesagt -- ich würde sogar sagen, dass ein Nachname nicht validiert werden DARF.
Die einzige meines Erachtens vernünftige Validierung des Nachnamens ist die, ob der Nachname eingegeben wurde (Länge > 0). Selbst eine Validierung auf bestimmte Zeichen (etwa nur Buchstaben) würde ich unterlassen, da je nach Kultur die Namen unterschiedlich geschrieben werden können
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.