it-swarm.com.de

Best Practices für die Namensvalidierung

Ich habe ein Formular und habe mich über bewährte Methoden bei der Validierung von Namen gewundert (insbesondere beim Auswerfen von Zeichen, aus denen normalerweise kein Name besteht, z. B. 123% ^ * $ £, obwohl dies theoretisch möglich ist) und ob es sinnvoll ist, mehr als nur zu prüfen Gegenwart. Ich habe oft gelesen, dass Sie nicht versuchen sollten, einen Namen zu validieren, aber ich habe mich gefragt, weil es sicherlich viele Daten gibt, die wir wegwerfen können.

Für den Kontext hat ein Berater, der an demselben Projekt wie ich beteiligt ist, gefragt, ob wir gegen dumme Daten validieren können, die in einem der Namensfelder in einem Formular erscheinen, dh Vorname, zweiter Vorname und Nachname. Ich denke, es ist wichtig zu sagen, dass ich ein in Großbritannien ansässiger Entwickler bin, da ich sicher bin, dass Namensgesetze diese Frage beeinflussen werden.

Ein Beispiel für ein Problem, das wir hatten, war, dass ein Benutzer versehentlich das Geburtsdatum in ein Namensfeld eingegeben hat - z. 16/06/1987. Dies war technisch gesehen ein gültiger Name auf unserem System, aber als diese Daten eine externe API erreichten, stürzte sie ab. Dies war ein Fehler, und ich denke, er hätte mit einer strengeren Validierung verhindert werden können.

Ich habe die Richtlinien für Urkundenumfragen in Großbritannien gefunden, die die Änderung Ihres Namens oder Titels einschränken: http://www.deedpoll.org.uk/AreThereAnyRestrictionsOnNames.html

Diese legen fest, dass Interpunktion ohne phonetische Bedeutung (unter anderem) ebenfalls nicht zulässig ist. Beachten Sie jedoch, dass dies nur Richtlinien sind - ich bin mir nicht sicher, ob die tatsächlichen rechtlichen Einschränkungen eines britischen Namens bestehen.

Wäre es sinnvoll, eine Namensvalidierung anhand dieser Richtlinien durchzuführen? Haben Sie jemals von jemandem gehört, der so etwas implementiert?

8
Suipaste

Im Allgemeinen ist es problematisch zu versuchen, solche Einschränkungen nicht nur für Namen, sondern für viele Arten von Daten aufzuerlegen. Das Robustheitsprinzip ist meiner Erfahrung nach wirklich der beste Weg: "Sei konservativ in dem, was du sendest, sei liberal in dem, was du akzeptierst."

Ich reichte meine Steuern einmal über einen häufig verwendeten US-Steuerantrag ein und mein Arbeitgeber war für einen Teil des Jahres an ein Unternehmen mit Sitz in Kanada verkauft worden (wo Postleitzahlen Buchstaben und Zahlen enthalten). Als ich die Postleitzahl eingab, war ich wurde informiert, dass die Postleitzahl, die ich eingeben wollte, ungültig war, da sie nur Zahlen enthalten darf. Dann hat es mich immer wieder belästigt, dass die Postleitzahl fehlte. Es war wirklich widerlich und unnötig.

Wenn Sie in Ihrer Situation Probleme mit bestimmten Datentypen haben, sollten Sie wahrscheinlich einen Ausnahmevorgang durchführen, nachdem die Eingabe erfasst wurde, und einen Menschen informieren, um die Situation zu bewerten. Selbst dann, wenn Sie das Pech haben, jemanden mit dem Namen "2016/09/08" zu bekommen, sind Sie SOL.

4
JimmyJames

Nein, es ist nicht sinnvoll, diese Einschränkungen umzusetzen. Es gibt viele Fehler, von denen viele in Falschheits-Programmierer glauben an Namen Aufgezählt

Zum Beispiel;

Die Namen der Personen sind in ASCII geschrieben. Die Namen der Personen werden in einem beliebigen Zeichensatz geschrieben. Menschen haben Nachnamen, Familiennamen oder alles andere, was von Leuten geteilt wird, die als ihre Verwandten anerkannt sind.

Ein Beispiel für ein Problem, das wir hatten, war, dass ein Benutzer versehentlich das Geburtsdatum in ein Namensfeld eingegeben hat - z. 16/06/1987. Dies war technisch gesehen ein gültiger Name auf unserem System, aber als diese Daten eine externe API erreichten, stürzte sie ab. Dies war ein Fehler, und ich denke, er hätte mit einer strengeren Validierung verhindert werden können.

Dies ist nicht die Schuld des Benutzers, sondern ein Fehler bei Ihrer Fehlerbehandlung beim API-Aufruf. Ihr API-Client sollte tolerant gegenüber Fehlerantworten der API sein. Wenn die von Ihnen aufgerufene Drittanbieter-API abgestürzt ist, ist dies ein Fehler, den sie beheben sollten. Öffnen Sie ein Ticket, in dem sie den Absturz melden. Wenn sie nicht bereit sind, das Problem zu beheben, ist dieser bestimmte Speicherort im Code ein geeigneter Ort, um Eingaben zu überprüfen - aber nicht, um festzustellen, was ein gültiger Name ist, sondern nur, um API-Aufrufe zu verhindern, die nur fehlschlagen können.

Alles in allem können Sie Benutzern während des Tippens eine Anleitung geben, z. B. neben diesem Eintrag vorschlagen: "Der eingegebene Name sieht so aus ein Datum, ist das richtig? ". Dies ist eine viel bessere Benutzererfahrung, als einen Fehler zurückzubekommen. Ich habe dies schon einmal bei der Validierung gesehen. Mein Name ist getrennt, und als ich mich online für einen Dienst anmeldete, gab das Formular einen Fehler zurück, als ich ihn mit der Aufschrift Your name is invalid. Eine bessere Benutzererfahrung wäre gewesen, wenn auf der Seite eine Warnung mit dem Hinweis Names in our system cannot contain hyphens; instead enter a space. Am besten wäre es jedoch, wenn die willkürliche Einschränkung nicht vorhanden wäre.

Beachten Sie jedoch, dass dies nur Richtlinien sind - ich bin mir nicht sicher, ob die tatsächlichen rechtlichen Einschränkungen eines britischen Namens bestehen.

Es spielt keine Rolle, wie die britischen Richtlinien oder die eines anderen Landes lauten. Selbst wenn Sie entscheiden, dass diese Software niemals außerhalb Großbritanniens verwendet wird, was ist mit Briten aus anderen Ländern? Sie passen nicht unbedingt in die Richtlinien.

überprüfen Sie anhand von dummen Daten, die in einem der Namensfelder in einem Formular angezeigt werden, dh Vorname, zweiter Vorname und Nachname

Nicht alle Menschen haben einen zweiten Vornamen. Nicht alle Menschen haben Nachnamen. Nicht alle Menschen haben einen Nachnamen oder einen zweiten Vornamen.


Versuchen Sie im Allgemeinen, so wenig Annahmen wie möglich zu treffen und Ihren Datenspeicher so aufzubauen, wie er verwendet werden muss. Verwenden Sie keine Namen als eindeutige Bezeichner, sondern haben Sie einen Benutzernamen oder eine Benutzer-ID. Speichern Sie einen einzelnen "Namen" -Wert, anstatt ihn in "first/middle/last" aufzuteilen. Wenn Sie mit einem externen System verbunden sind, für das Sie solche Aufgaben ausführen müssen, speichern und präsentieren Sie die Daten auf eine minimale Weise, die es Ihnen weiterhin ermöglicht.

11
Daenyth