2016-07-07 5 views
0

Ich versuche, einer Regex ein weiteres Feature hinzuzufügen, das versucht, Namen zu validieren (zuerst oder zuletzt).Namensvalidierung - Hinzufügen eines Häkchens zu dieser Regex, um die Eingabe von genau identischen Zeichen zu stoppen

Im Moment sieht es wie folgt aus:

/^ (?!^Mr $ |^mrs $ |^ms $ |^verpassen $ |^dr $ |^mr-mrs $) ([az ] [a-z '-] {1,}) $/i

https://regex101.com/r/pQ1tP2/1

die Idee ist folgende

  • Sie nicht zulassen, dass Sie gerade hinzufügen, einen Titel wie Herr, Frau zu tun usw.
  • Stellen Sie sicher, dass das erste Zeichen al ist Etter
  • nachfolgenden Zeichen Stellen Sie sicher, entweder Buchstaben, Bindestrich oder Apostroph
  • Mindestens zwei Zeichen

ich es geschafft haben, so weit zu kommen (schockierend ich regex zu finden, so verwirrend lol).

Es passt Dinge wie O'Brian oder Anne-Marie usw. und macht einen ziemlich guten Job.

Meine nächsten Ergänzungen, mit denen ich aber gekämpft habe! versuchen, zusätzliche Funktionen zu den regulären Ausdruck hinzuzufügen, um nicht auf dem folgenden zu entsprechen:

  • Eingabe Genau die gleichen Zeichen dh aaa bbbbb etc

Thanks :)

Antwort

2

Ich würde eine weitere negative Vorschau hinzufügen alternativer Abgleich gegen ^(.)\1*$, dh jedes Zeichen, wird bis zum Ende der Zeichenfolge wiederholt.
inklusive wie in Ihrem regex ist, wäre es, dass machen:

/^(?!^mr$|^mrs$|^ms$|^miss$|^dr$|^mr-mrs$|^(.)\1*$)([a-z][a-z'-]{1,})$/i 

Allerdings würde ich wahrscheinlich die negative Vorschau vereinfachen wie folgt:

/^(?!(mr|ms|miss|dr|mr-mrs|(.)\2*)$)([a-z][a-z'-]{1,})$/i 

Die Änderungen sind wie folgt:

  • Wir bewerten den Lookahead am Anfang der Zeichenfolge, wie durch die vorangestellte ^ angezeigt: keine Notwendigkeit zu wiederholen, dass wir den Stern übereinstimmen t der Zeichenfolge in ihren Klauseln
  • Jede Alternative entspricht dem Ende der Zeichenfolge. Wir können die Alternativen in eine Gruppe einfügen, gefolgt von dem Ende des String-Ankers
  • Wir haben eine neue Gruppe erstellt, die wir in unserem Rückverweis berücksichtigen müssen: um die gleiche Gruppe zu referenzieren, Es muss jetzt \2 statt \1 adressieren. Eine Alternative in bestimmten Regex-Geschmacksrichtungen wäre die Verwendung einer nicht-einfangenden Gruppe (?:...)
+0

Das ist fantastisch, liebe das Internet ... Stellen Sie eine Frage hier und lernen Sie so viel zusammen mit der Antwort :) Danke! – user1259167

Verwandte Themen