Question

Il existe les caractères standard A-Z, a-z, mais aussi des traits d'union, des tirets, des guillemets, etc.

De plus, tous les caractères internationaux, tels que les trémas, etc.

Alors, pour un système basé en anglais, quel est l'ensemble complet? Qu'en est-il des ensembles pour d'autres langues? Qu'en est-il de UTF8, UTF16, etc.?

Question bonus: combien de champs de noms sont nécessaires et quelle est leur longueur maximale?

MODIFIER: Le nom des personnes implique deux types de caractères différents: ceux qui font partie du contexte et ceux qui existent pour des raisons structurelles. Je ne veux pas limiter ou interférer avec les caractères de contexte, mais je dois traiter les caractères structurels.

Par exemple, un nom est entré, séparé par un tiret, mais il était difficile de le distinguer du caractère négatif. Pour faciliter la recherche dans le système, je souhaite utiliser les cinq types de tirets différents et les mapper sur un caractère unique (moins), afin que le chercheur n'ait pas besoin de savoir précisément quel symbole a été saisi à l'origine.

Le problème existe pour les tirets, les guillemets probablement aussi, mais aussi combien de symboles?

Était-ce utile?

La solution

Le W3C a publié un bon article intitulé Noms personnels dans le monde entier cela explique assez bien les problèmes (et les solutions possibles) (il s’agissait à l’origine d’un billet de blog en deux parties de Richard Ishida: partie 1 et partie 2 )

Personnellement, je dirais: prenez en charge tous les caractères Unicode imprimables et, pour plus de sécurité, fournissez un seul champ "nom". qui contient le nom complet formaté. De cette façon, vous pouvez stocker à peu près toutes les formes de nom. Vous aurez peut-être besoin d'un stockage plus structuré, mais ne vous attendez pas à pouvoir stocker chaque combinaison sous une forme structurée, car il en existe tout simplement trop.

Autres conseils

Si vous me le demandez, des personnages en liste blanche qui pourraient apparaître dans le nom d’une personne sont inutilisables. Bien sûr, [A-Za-z] est un bon point de départ, mais comme vous l'avez dit, vous rencontrez des problèmes avec "Européen". des noms. Donc, vous cartographiez tous les trémas, circonflexes et autres. Qu'en est-il des noms chinois? Japonais? Indien? Hébreu? Vous entrez dans une bataille contre les éoliennes.

Si vous devez absolument vérifier la validité du nom d'une personne, je vous conseillerais de créer une modeste liste noire de certains caractères. Les accolades, les caractères mathématiques, certaines ponctuations et autres peuvent être ignorés sans danger. Mais je serais prudent, si j'étais vous.

Il serait peut-être préférable d'accepter tout ce qui va arriver. UTF-16 devrait être le jeu de caractères excessif d'aujourd'hui, qui devrait suffire pour les années à venir.

Modifier: En ce qui concerne votre question sur la longueur et le nombre de noms. Si vous voulez vraiment que les gens écrivent leurs noms réels et complets, je suppose que la seule réponse à toute épreuve à ces deux questions serait "infini". Ne pas être en mesure de donner de vrais exemples pour des êtres humains, mais il existe sûrement des exemples analogues pour des humains tels que nom natif de la ville de Bangkok .

Je ne pense pas qu'il y ait une réponse définitive. Après tout, certaines personnes ont des noms qui ne peuvent même pas être exprimés en UTF-16 ...

Symbole du prince

Il y a des personnes étranges qui donneront à leurs enfants les noms les plus fous, y compris des signes de ponctuation bizarres, des accents qui n'existent pas dans leur propre langue, etc.

Cependant, vous pouvez imposer des restrictions arbitraires à votre base de données. Si vous le souhaitez, vous pouvez exiger des noms ASCII 7 bits. C'est légèrement impoli pour les utilisateurs, mais ils vivront avec. Cela facilite certainement la recherche.

La fille de mon collègue s'appelle Amélie. Mais même certains sites Web officiels (pas tous!) Du gouvernement britannique ("Veuillez saisir le nom exactement comme indiqué sur l'acte de naissance") n'acceptent pas le code Unicode, il doit donc utiliser "Amélie" à la place.

Tout caractère pouvant être représenté par un multiple de huit bits (supérieur à zéro) est un caractère possible pour le nom d'une personne. Les longueurs des noms et des encodages étant arbitraires, aucune limite supérieure ne doit être prise en compte.

Assurez-vous simplement de désinfecter les entrées de votre base de données afin que les petites tables Bobby Drop ne vous réussissent pas.

Sur la question des champs de nom, la réponse FAUX est le prénom, l'initiale du prénom, le nom de famille, etc. pour de nombreuses raisons.

  1. De nombreuses personnes sont connues sous leur deuxième prénom et utilisent officiellement une première initiale, un deuxième prénom, le format du nom de famille.

  2. Dans certaines cultures, le nom de famille est le prénom et le nom donné est le nom de famille.

  3. Les prénoms multiples et / ou intermédiaires deviennent de plus en plus courants. Comme le souligne @Dour High Arch, l'autre extrême est celle des personnes ne possédant qu'un seul mot.

Dans une base de données orientée objet, vous stockeriez un objet Name avec des méthodes pour renvoyer un nom de style annuaire ou signature. et le magasin de stockage contiendrait toutes les données nécessaires pour prendre en charge ces méthodes.

Je n'ai pas encore vu de modèle de base de données relationnelle qui améliore le modèle de deux chaînes de longueur variable pour les noms de style de répertoire et de style de signature.

Cela dépend vraiment de la raison pour laquelle l'application est censée être utilisée.

Bien sûr, en théorie, c’est génial si vous autorisez l’utilisation de tous les scripts sur la terre verte de dieu, mais si la base de données est également utilisée par le personnel d’assistance, pourra-t-il gérer les noms en caractères japonais, hébreu et thaï? Pouvez-vous imprimer si elle est utilisée pour imprimer des étiquettes d'affranchissement?

Vous pouvez ajouter un champ supplémentaire "Transcription latine", mais IMO il est vraiment correct de le limiter aux caractères ISO-8859-1 - Les personnes qui n'utilisent pas de caractères latins sont maintenant tellement habituées à utiliser une transcription qu'ils ne s'en soucient plus, à moins d'être des nationalistes hardcore.

Je crée des logiciels pour les auto-écoles aux États-Unis. Ce qui compte le plus pour moi, ce qui compte le plus, est ce que le DMV de l’État accepte comme nom propre sur un permis de conduire. Dans mon cas, il serait difficile d’autoriser des noms autres que ceux autorisés par le DMV, même si ces noms étaient légaux, car le même nom devait ensuite être utilisé pour un permis de conduire.

De StackOverflow, je n’avais toujours pas confirmé la réponse dont j'avais besoin. Et je sais que dans mon état (Californie), ils utilisent des AS400 avec des logiciels probablement écrits en COBOL, et à ma connaissance, ils ne prennent en charge qu'un jeu de caractères 8 bits. (Est-ce EBCDIC?) Quoi qu'il en soit ... Ugh.

Alors, j’ai appelé le California DMV ... Effectivement, leur système n’autorise que des espaces, des espaces et rien d’autre. Même les traits d'union ne sont pas autorisés - Les traits d'union sont remplacés par des espaces. En fait, apparemment pour être difficiles, ils n'utilisent que des capitales. Et des noms tels que " O'Malley " doit être remplacé par OMALLEY.

Laissez cela au gouvernement. Je dois dire que je suis ravi de ne pas être un développeur travaillant pour DMV. (Bien que je puisse vraiment utiliser ce genre de salaire.)

UTF-8 devrait suffire. En ce qui concerne les champs de noms, vous voudrez au minimum un prénom et un dernier.

Que faites-vous lorsque vous avez "The Artist, anciennement connu sous le nom de Prince". Ce symbole qu’il a utilisé n’est pas un caractère du jeu Unicode (autant que je sache).

C’est un peu une légèreté, mais en même temps, les noms sont un concept assez large qui ne se prête pas bien à un format structuré. Dans ce cas, une forme libre pourrait être la plus appropriée.

En fonction de la complexité de la structure de votre nom, j'ai pu constater:

  1. Prénom
  2. Initiale / Nom de famille
  3. Nom de famille
  4. Suffixe (Sr. II, III, IV, etc.)
  5. Préfixe (M., Mme, Mme, etc.)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top