Regulärer Ausdruck für Prüfung von Namen
Enrico
- php
0 Der Martin3 MudGuard
Guten Abend,
bei der Programmierung unserer Vereinshomepage bin ich nun bei der Validierung der Eingaben angelangt.
Bei der Eingabe des Namens möchte ich beispielsweise folgende Varianten als zulässige Eingaben akzeptieren:
Beispiel 1: Tom
Beispiel 2: Hans Meier
Beispiel 3: Hans-Jürgen
Beispiel 4: Hans-Peter Müller
Beispiel 5: Hans Meier-Müller
Beispiel 6: Hans-Peter Meier-Müller
In einzelne Bestandteile runtergebrochen sollen folgende Regeln geprüft werden:
-Mindestens drei Buchstaben (Beispiel 1) als Pflichteingabe
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiele 2 und 3)
-Optional ein Leerzeichen, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 4)
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 5)
Mein aktueller Ausdruck sieht folgendermassen aus:
/[1]{3,}(([ |-][a-züöä]{3,}){0,}([a-züöä]{3,}){0,}([a-züöä]{3,}){0,})$/i
Über einen Online-Tester bekomme ich bei der Eingabe von "tom-tom meier-müller" folgendes Ergebnis:
Array
(
[0] => tom-tom meier-müller
[1] => -tom meier-müller
[2] => -müller
)
Ist mein Ausdruck damit richtig?
Wenn nein, wie muss ich ihn aufbauen?
Wenn ja, Wie kann ich meinen Ausdruck verbessern?
Warum wird beim Bindestrich ein neuer Treffer abgegrenzt?
Danke schon mal für eure Mithilfe.
Gruß
Enrico
a-züöä ↩︎
Hallo,
Bei der Eingabe des Namens möchte ich beispielsweise folgende Varianten als zulässige Eingaben akzeptieren:
Beispiel 1: Tom
Beispiel 2: Hans Meier
Beispiel 3: Hans-Jürgen
Beispiel 4: Hans-Peter Müller
Beispiel 5: Hans Meier-Müller
Beispiel 6: Hans-Peter Meier-Müller
damit ist ja so ziemlich alles erlaubt - ich frage mich fast, warum du überhaupt noch etwas prüfen willst.
-Mindestens drei Buchstaben (Beispiel 1) als Pflichteingabe
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiele 2 und 3)
-Optional ein Leerzeichen, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 4)
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 5)
Oder anders formuliert: Mindestens drei Buchstaben, dann bis zu dreimal die Kombination ([Leerzeichen oder Bindestrich] und nochmal mindestens drei Buchstaben). Bedenke, dass "Buchstaben" mehr umfassen sollte als [a-zäöü].
/[1]{3,}(([ |-][a-züöä]{3,}){0,}([a-züöä]{3,}){0,}([a-züöä]{3,}){0,})$/i
Wozu die scheinbar wahllos gesetzten runden Klammern? Willst du Teile des gefundenen Ausdrucks weiterverwenden? Warum dann nicht den ersten Teil, der idR den ersten Vornamen enthält?
Ist mein Ausdruck damit richtig?
Nein. Beispielsweise würden Namen wie "René Samaire", "Rainer Weiß" oder "Richard O'Toole" gnadenlos abgewiesen.
Warum wird beim Bindestrich ein neuer Treffer abgegrenzt?
Weil du es so vorgibst.
Ehrlich: Namen können so unterschiedlich sein, vor allem bei der heutigen ethnischen Mischung unserer Gesellschaft. Da überhaupt noch eine Prüfung anzusetzen, erscheint mir nicht sinnvoll.
Ciao,
Martin
a-züöä ↩︎
Hallo Martin,
Nein. Beispielsweise würden Namen wie "René Samaire", "Rainer Weiß" oder "Richard O'Toole" gnadenlos abgewiesen.
Ehrlich: Namen können so unterschiedlich sein
Hmm, ich denke, dann wäre der Ansatz richtiger und sinnvoller, Zahlen und Satzzeichen, ausgenommen beispielsweise den Bindestrich, auszuschliessen oder was meinst Du?
Das würde den regulären Ausdruck auch wesentlich vereinfachen.
Gruß
Enrico
Hi!
Ehrlich: Namen können so unterschiedlich sein
Hmm, ich denke, dann wäre der Ansatz richtiger und sinnvoller, Zahlen und Satzzeichen, ausgenommen beispielsweise den Bindestrich, auszuschliessen oder was meinst Du?
Die Prüfung ganz weglassen. Egal, was du verbietest, es findet sich immer ein Weg, einen falschen Namen oder unerwünschten Text einzutragen.
Lo!
Und das mache ich jetzt auch, denn eine solche Prüfung wäre, wie ich anhand der Beispiels erkennen durfte, ein Faß ohne Boden.
Gruß
Enrico
Hi,
-Mindestens drei Buchstaben (Beispiel 1) als Pflichteingabe
Warum? Bei transkribierten chinesischen Vornamen kommt es oft vor, daß nur 2 Buchstaben rauskommen.
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiele 2 und 3)
-Optional ein Leerzeichen, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 4)
-Optional ein Leerzeichen oder Bindestrich, gefolgt von mindestens drei weiteren Buchstaben (Beispiel 5)
Warum immer die 3 Zeichen Minimum? Bei spanischen Namen kommt z.B. gerne mal ein einzelnes "y" drin vor, bei französchischen gerne mal ein "de" oder "du".
Mein aktueller Ausdruck sieht folgendermassen aus:
/[1]{3,}(([ |-][a-züöä]{3,}){0,}([a-züöä]{3,}){0,}([a-züöä]{3,}){0,})$/i
Namen, die nicht durchkommen:
André. Ryan O'Hara. Antonio di Longhi. François d'Artagnan. Johann Großkopf.
(die Beispiele sind frei erfunden - Ähnlichkeiten mit realen Personen sind rein zufällig).
zzz-zzz|zzz-zzz kommt dafür durch.
Zwischen den Namensteilen erlaubst Du auch die Pipe. Ist das Absicht? Oder hast Du Zeichenklassen nicht verstanden?
Die Begrenzung auf nur 4 Teile dürfte auch einige Leute ausschließen (Gutti z.B., aber auch andere Abkömmlinge von Adligen, deren Nachnamen oft einige Teile enthalten, a la "Donald Dagobert von Entenhausen Freiherr von und zum Weiher".
cu,
Andreas
a-züöä ↩︎