Domanda

Ci sono i caratteri standard A-Z, a-z, ma ci sono anche trattini, trattini, virgolette, ecc.

Inoltre, ci sono tutti i personaggi internazionali, come le umlaut, ecc.

Quindi, per un sistema basato su inglese, qual è il set completo? E i set per altre lingue? Che dire di UTF8, UTF16, ecc?

Domanda bonus: quanti campi nome sono necessari e quali sono le loro lunghezze massime?

EDIT: Esistono sicuramente due diversi tipi di personaggi coinvolti nei nomi delle persone, quelli presenti nel contesto e quelli presenti per motivi strutturali. Non voglio limitare o interferire con i caratteri di contesto, ma ho bisogno di occuparmi di quelli strutturali.

Ad esempio, avevo un nome che era separato da un trattino, ma era difficile distinguerlo dal carattere meno. Per facilitare la ricerca del sistema, voglio prendere tutti e cinque i diversi tipi di trattini e mapparli su un carattere unico (meno), in questo modo il ricercatore non ha bisogno di sapere specificamente quale simbolo è stato inizialmente inserito.

Il problema esiste per i trattini, probabilmente anche tra virgolette, ma anche quanti altri simboli?

È stato utile?

Soluzione

C'è un buon articolo del W3C chiamato Nomi personali in tutto il mondo che spiega abbastanza bene i problemi (e le possibili soluzioni) (in origine era un post in due parti del blog di Richard Ishida: parte 1 e parte 2 )

Personalmente direi: supporta ogni carattere Unicode stampabile e per sicurezza fornisci solo un singolo campo "nome". che contiene il nome completo e formattato. In questo modo è possibile memorizzare praticamente ogni forma di nome. Potrebbe essere necessario uno spazio di archiviazione più strutturato, ma non aspettarti di essere in grado di archiviare ogni singola combinazione in una forma strutturata, poiché ce ne sono semplicemente troppe diverse.

Altri suggerimenti

I caratteri nella whitelist che potrebbero apparire nel nome di una persona sono la strada sbagliata, se me lo chiedi. Certo, [A-Za-z] è un buon punto di partenza, ma, come hai detto, hai problemi con " European " nomi. Quindi mappa tutte le umlaut, i circonflessi e quelli. E i nomi cinesi? Giapponese? Indiano? Ebraico? Stai entrando in una battaglia contro le turbine eoliche.

Se devi assolutamente verificare la validità del nome di qualcuno, ti suggerirei di creare una modesta lista nera di alcuni personaggi. Parentesi graffe, caratteri matematici, punteggiatura e così via potrebbero essere sicuri da ignorare. Ma sarei cauto, se fossi in te.

Potrebbe essere meglio accettare qualsiasi cosa accada. UTF-16 dovrebbe essere il set di caratteri di overkill di oggi, che dovrebbe essere adeguato per alcuni anni a venire.

Modifica: per quanto riguarda la tua domanda sulla lunghezza e la quantità dei nomi. Se vuoi davvero che le persone scrivano i loro nomi reali e completi, immagino che l'unica risposta infallibile a entrambe queste domande sarebbe "infinita". Non essere in grado di estrarre esempi reali per gli esseri umani, ma sicuramente ci sono esempi analoghi per gli esseri umani come the nome nativo della città di Bangkok .

Non credo che ci sia una risposta definitiva. Dopotutto, alcune persone hanno nomi che non possono nemmeno essere espressi in UTF-16 ...

Simbolo del principe

Ci sono alcune persone strane là fuori, che daranno ai loro figli i nomi più folli, tra cui la punteggiatura strana, accenti che non esistono nella loro lingua, ecc.

Tuttavia, è possibile applicare restrizioni arbitrarie al database. Se vuoi puoi insistere sui nomi ASCII a 7 bit. È leggermente scortese con gli utenti, ma vivranno con esso. Certamente rende la ricerca più semplice.

La figlia del mio collega si chiama Amélie. Ma anche alcuni (non tutti!) Siti web ufficiali del governo britannico (" Ti preghiamo di inserire il nome esattamente come indicato sul certificato di nascita ") non accetteranno l'unicode, quindi deve usare invece "Amelie".

Qualsiasi carattere che può essere rappresentato da un multiplo di otto bit (maggiore di zero) è un possibile carattere per il nome di una persona. Le lunghezze di entrambi i nomi e le codifiche sono arbitrarie, quindi nessun limite superiore deve essere considerato.

Assicurati solo di disinfettare gli input del tuo database in modo che non ci siano piccoli drop-table di Bobby.

Sulla questione dei campi nome, la risposta ERRATA è il nome, l'iniziale, il cognome, ecc. per molte ragioni.

  1. Molte persone sono conosciute con il loro secondo nome e usano formalmente un primo nome iniziale, secondo nome, formato del cognome.

  2. In alcune culture, il cognome è il nome e il nome è il cognome.

  3. Più nomi iniziali e / o intermedi stanno diventando più comuni. Come sottolinea @Dour High Arch, l'altro estremo sono le persone con una sola parola nel loro nome.

In un database orientato agli oggetti, si memorizzerebbe un oggetto Name con metodi per restituire un nome stile directory o stile firma; e l'archivio di backup conterrebbe tutti i dati necessari per supportare tali metodi.

Non ho ancora visto un modello di database relazionale che migliora il modello di due stringhe a lunghezza variabile per i nomi in stile directory e in stile firma.

Dipende davvero da cosa dovrebbe essere utilizzata l'app.

Certo, in teoria è fantastico se si consente di utilizzare tutti gli script sulla terra verde di dio, ma se il DB viene utilizzato anche dal personale di supporto, saranno in grado di gestire i nomi in giapponese, ebraico e tailandese? Riesci a stampare se viene utilizzato per stampare etichette postali?

Potresti aggiungere un ulteriore campo "Trascrizione latina", ma IMO è davvero OK limitarlo a ISO-8859-1 caratteri - Le persone che non usano caratteri latini sono ormai abituate a dover usare una trascrizione che a loro non importa più, a meno che non siano nazionalisti hardcore.

Sto realizzando software per scuole guida negli Stati Uniti, quindi per me ciò che conta di più di ciò che i DMV statali accettano come nome proprio sulla patente di guida. Nel mio caso, ciò causerebbe problemi a consentire nomi oltre a quelli consentiti dal DMV, anche se tali nomi erano legali perché lo stesso nome deve essere successivamente utilizzato per una patente di guida.

Da StackOverflow, non avevo ancora confermato la risposta di cui avevo bisogno. E mi capita di sapere che nel mio stato (California) stanno usando AS400 con software probabilmente scritto in COBOL, e per quanto ne so, supportano solo un set di caratteri a 8 bit. (È EBCDIC?) Comunque ... Ugh.

Quindi, ho chiamato il DMV della California ... Certo, il loro sistema consente A-Z e spazi e nient'altro. Non sono ammessi nemmeno trattini: i trattini vengono sostituiti con spazi. In effetti, apparentemente solo per essere difficili, usano solo i capitali. E nomi come " O'Malley " deve essere sostituito con OMALLEY.

Lascialo al governo. Devo dire che sono entusiasta di non essere uno sviluppatore che lavora per DMV. (Anche se potrei davvero usare quel tipo di stipendio.)

UTF-8 dovrebbe essere abbastanza buono, per quanto riguarda i campi nome, ti consigliamo almeno un nome e un cognome.

Cosa fai quando hai "L'artista precedentemente noto come principe". Quel simbolo che ha usato non è un personaggio nel set Unicode (AFAIK).

È un po 'di leggerezza, ma allo stesso tempo, i nomi sono un concetto piuttosto ampio che non si presta bene a un formato strutturato. In questo caso, qualcosa in formato libero potrebbe essere più appropriato.

A seconda della complessità della struttura del tuo nome ho potuto vedere:

  1. Nome
  2. Secondo nome / secondo nome
  3. Cognome
  4. Suffisso (Jr. Sr. II, III, IV, ecc.)
  5. Prefisso (Mr., Mrs., Ms., ecc.)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top