Procedure consigliate per la convalida del nome

4

Ho un modulo e mi chiedevo le migliori pratiche per convalidare i nomi (in particolare buttare fuori caratteri che in genere non costituiscono un nome, ad esempio 123% ^ * $ £ se teoricamente possibile) e se è ragionevole effettuare qualcosa di più che controllare la presenza. Ho letto spesso che non dovresti provare a convalidare un nome, ma mi sono chiesto perché sicuramente ci sono molti dati che possiamo buttare fuori.

Per contestualizzazione un consulente coinvolto nello stesso progetto come me ha chiesto se siamo in grado di validare i dati stupidi che appaiono in uno qualsiasi dei campi del nome in un modulo, cioè nome, secondo nome e cognome. Penso che sia importante affermare che sono uno sviluppatore con sede nel Regno Unito poiché sono sicuro che le leggi sui nomi peseranno su questa domanda.

Un esempio di un problema che abbiamo riscontrato è che un utente ha inserito accidentalmente la data di nascita in un campo nome - ad es. 16/06/1987. Questo era tecnicamente un nome valido sul nostro sistema, ma quando questi dati raggiungevano un'API esterna, si bloccava. Questo è stato un errore e penso che avrebbe potuto prevenirlo con una convalida più severa.

Ho trovato le linee guida del sondaggio del Regno Unito che impongono restrizioni sulla modifica del nome o del titolo: link

Questi specificano che la punteggiatura senza significato fonetico non è consentita (tra le altre cose). Tuttavia, si noti che queste sono solo linee guida. Non sono sicuro che i limiti legali effettivi di un nome inglese siano.

Sarebbe sensato eseguire la convalida del nome basata su queste linee guida? Hai mai sentito qualcuno che implementa qualcosa del genere?

    
posta Suipaste 08.09.2016 - 14:22
fonte

2 risposte

3

In generale è problematico cercare di imporre restrizioni come questa, non solo per i nomi ma per molti tipi di dati. Il principio di robustezza è davvero il modo migliore per andare, nella mia esperienza: "Sii prudente in ciò che invii, sii liberale cosa accetti. "

Una volta stavo compilando le mie tasse tramite una applicazione fiscale statunitense di uso comune e il mio datore di lavoro per parte di quell'anno era stato venduto a una società con sede in Canada (dove i codici postali contengono lettere e numeri). codice, mi è stato comunicato che il codice postale che stavo cercando di inserire non era valido perché deve contenere solo numeri. Poi mi ha importunato ripetutamente che il codice postale mancava. E 'stato davvero odioso e inutile.

Nella tua situazione, se hai problemi con determinati tipi di dati, dovresti probabilmente avere un processo di eccezione dopo che l'input è stato catturato e informare un umano per valutare la situazione. Anche allora, se ti capita di essere abbastanza sfortunato da far chiamare qualcuno "2016/09/08", allora sei SOL.

    
risposta data 08.09.2016 - 15:51
fonte
8

No, non è ragionevole provare a implementare queste restrizioni. Ci sono molti difetti, molti dei quali sono elencati in I programmatori di Falsehoods credono sui nomi

Ad esempio;

People’s names are written in ASCII. People’s names are written in any single character set. People have last names, family names, or anything else which is shared by folks recognized as their relatives.

An example of an issue we had was that a user accidentally entered the date of birth in a name field - e.g. 16/06/1987. This was technically a valid name on our system but when this data reached an external API it crashed it. This was a mistake and I think it could have prevented with more strict validation.

Questo non è un errore dell'utente, ma un errore nella gestione degli errori nella chiamata api. Il tuo client API deve essere tollerante delle risposte di errore dall'API. Se l'API di terze parti viene arrestata in modo anomalo, è un bug che dovrebbero risolvere. Apri un ticket con loro segnalando l'incidente. Se non sono disposti a risolverlo, allora quella posizione specifica nel codice è un luogo appropriato per convalidare gli input, ma non per determinare quale sia un nome valido, semplicemente per impedire chiamate api che possono solo fallire.

Tutto ciò che è stato detto, potresti fornire agli utenti la guida di tipo tuo, ad esempio suggerendo accanto a quella voce "Il nome che hai inserito sembra una data, è corretto?" . Questa è un'esperienza utente molto migliore di un errore. Ho visto questo accadere con la convalida prima; il mio nome è sillabato e al momento della registrazione per un servizio online, il modulo ha restituito un errore quando l'ho inviato dicendo Your name is invalid . Un'esperienza utente migliore sarebbe stata avere un avviso nella pagina che suggeriva Names in our system cannot contain hyphens; instead enter a space . Meglio ancora sarebbe non avere la restrizione arbitraria in atto.

However note that these are only guidelines - I'm not sure that the actual legal limitations of a British name are.

Non importa quali sono le linee guida britanniche o quelle di qualsiasi altro paese. Anche se decidi che questo software non verrà mai usato al di fuori della Gran Bretagna, che dire dei britannici di altri paesi? Non necessariamente rientrano nelle linee guida.

validate against silly data appearing in any of the name fields in a form, that is first name, middle names and last name

Non tutte le persone hanno un secondo nome. Non tutte le persone hanno cognomi. Non tutte le persone hanno un cognome o un secondo nome.

In generale, cerca di fare il minor numero possibile di presupposti e costruisci il tuo archivio di dati su come deve essere usato. Non utilizzare nomi come identificatori univoci, ma avere un nome utente o un id utente. Memorizza un singolo valore "nome" anziché dividere in primo / medio / ultimo. Se stai interagendo con un sistema esterno che richiede di fare cose del genere, memorizza e presenta i dati nel modo minimale che ti consente comunque di farlo.

    
risposta data 08.09.2016 - 14:57
fonte

Leggi altre domande sui tag