5546 sujets

Sémantique web et HTML

La difficulté des particules nobiliaires

Bonjour à tous,
Je me tourne vers vous aujourd’hui dans l’espoir de trouver une solution à un défi technique sur lequel je travaille actuellement. Je suis en train de concevoir un formulaire de saisie nominative et je souhaite m’assurer que les noms de famille d’origine française, même composés, soient correctement validés selon des critères spécifiques.
Le but est de créer une expression régulière pour un attribut « pattern » dans un élément « input » HTML, qui valide les noms de famille composés en autorisant uniquement certains séparateurs (espace [ ], trait d’union [-], apostrophe droite ['], et apostrophe courbe [’]). Chaque mot doit commencer par une lettre majuscule suivie de lettres minuscules, à l’exception de six cas particuliers concernant les particules de noblesse (« de », « des », « du »), qui doivent être en minuscules et correctement espacées pour être acceptées. En outre, les formes majuscules de ces particules, lorsqu’elles sont entourées d’espaces, doivent être explicitement rejetées.
Source réduit :
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Validation de Nom</title>
  <style>
    input:focus:invalid {
      background-color: red;
    }
    input:focus:valid{
      background-color: green;
    }
  </style>
</head>
<body>
  <form action="/submit-form" method="post">
    <label for="nom">Nom :</label>
    <input
      id="nom"
      class="nom"
      name="nom"
      type="text" id="nom" name="nom"
      minlength="1"
      maxlength="28"
      pattern="^[A-ZÀ-Ÿ][a-zà-ÿ]*(?:[ s\-'’][A-ZÀ-Ÿ][a-zà-ÿ]*)*$"
      title="Chaque mot doit commencer par une majuscule suivie de minuscules. Les mots peuvent être séparés par une espace, un trait d'union, une apostrophe droite ou une apostrophe courbe."
      required
      autocomplete="given-name"
      spellcheck="false"
      autocapitalize="none"
      placeholder="Jean"
      aria-invalid="false"
      enterkeyhint="next">
    <button type="submit">Envoyer</button>
  </form>
</body>
</html>


Ressource :
https://regex101.com/
Voici quelques exemples pour illustrer ce que j’aimerais réaliser :
– "Dubois " devrait être rejeté (la chaine finit par une espace).
– "Dubois de La Patelière" devrait être accepté.
– "Dubois-de La Patelière" devrait être rejeté (le « de » en minuscule n’est pas précédé d’une espace).
– "Dubois-de-La Patelière" devrait être rejeté (le « de » en minuscule n’est entouré par des espaces).
– "Dubois-De La Patelière" devrait être accepté.
– "Dubois-DeLa Patelière" devrait être rejeté (il y a plus d’une majuscule dans un mot).

Je suis conscient que cette demande est assez spécifique et pourrait présenter une complexité notable pour une mise en œuvre en une seule expression régulière. D’un autre côté, il doit bien y avoir une solution en regex.
Je vous remercie d’avance pour votre temps et pour votre expertise.
Modifié par Pyanepsion (19 Mar 2024 - 08:23)
Bonsoir,

Vraiment intéressant cette problématique. Mais avant même de foncer tête baissée dans la construction d'une regex : êtes-vous sûr de tous vos critères ?

Par exemple, selon vos critères, si je suis irlandais et que je m'appelle "Conor McGregor", ça ne passe pas (deux majuscules dans un même mot)...
Modérateur
Bonjour,
Olivier C a écrit :
Mais avant même de foncer tête baissée dans la construction d'une regex : êtes-vous sûr de tous vos critères ?

+1

Victor De Le Rue, Ludwig van Beethoven et beaucoup d'autres vous remercient d'avance pour les choix que vous vous apprêtez à faire.

Je dis ça en connaissance de cause. Récemment, on a dû payer une pénalité pour un billet d'avion parce qu'on n'a pas pu saisir correctement nos noms (ceux figurant sur nos passeports) du fait de restrictions sur le formulaire de saisie mises en place par un nième codeur au QI de 200 champion de la regex. Smiley cligne

EDIT: je viens de découvrir quelques particularités supplémentaires assez effrayantes pour ceux qui espèrent automatiser ce contrôle des noms de famille. On écrit semble-t-il Vincent van Gogh (néerlandais) mais Jean-Claude Van Damme (belge) parce que "van" ne prend pas de majuscule si la personne est d'origine néerlandaise, mais en prend une si elle est d'origine flamande.

Amicalement,
Modifié par parsimonhi (19 Mar 2024 - 03:36)
Si vous vous appelez Elon Musk vous pourriez être susceptible d'appeler l'une de vos filles "X Æ A-XII". Et encore, il a dû apporter une modification car auparavant c'était "X Æ A-12", l'administration américaine ayant refusé le chiffre dans le prénom.

Bref, ce que je veux dire par là c'est que l'on ne devrait pas faire bien plus ici que d'appliquer un trim() et la suppression des espaces en double. Et l'on n'a pas besoin d'attendre la validation du formulaire pour l'appliquer, moi je le fais en assistance à la saisie.(coucou .addEventListener "input" ; si l'on trouve cela trop déroutant pour l'utilisateur on peut le faire sur "change").
Cette communication est spécifiquement adressée à un public francophone, et par extension, concerne uniquement les noms de famille respectant les conventions orthographiques françaises. Cela implique que la première lettre des mots constituant un nom de famille est systématiquement majuscule dans notre formulaire, à l’exception notable des particules dénotant une appartenance nobiliaire en France (c’est-à-dire « de », « des », « du »). Cette règle s’applique sans exception dans notre contexte.

Nous savons que les noms d’origine étrangère peuvent présenter des cas particuliers, entrainant certaines complexités que nous avons choisi de ne pas gérer à l’heure actuelle, car ils ne correspondent majoritairement pas à notre base d’utilisateurs, sauf dans des situations où leur adaptation s’avère aisée. Des exemples notables incluent les noms tels que « McDonald’s » avec 2 majuscule et une minuscule après l’apostrophe, ou ceux issus de la noblesse étrangère, par exemple allemande, avec des particules comme « am », « an », « auf », « auf der », « aus der », « im », « von », « von der », « von und zu », « zu », « zum », et « zur », qui devraient normalement s’écrire en minuscule. Si McDonald’s nous contacte, nous sommes surs qu’ils sauront adapter leur nom comme par le passé lors de leur introduction en France, où ils utilisaient « Mc Donald ».

@olivier : Pour Conor McGregor, il devra entrer son nom complet et traditionnel, Conchúr Antóin Mac Gréagóir, pour que le système puisse le reconnaitre correctement.

@parsimohi : Si le formulaire est configuré correctement, Victor de Le Rue sera accepté conformément aux règles établies, illustrant ainsi notre capacité à accommoder les noms respectant la graphie française, y compris ceux comportant des particules nobiliaires.
Modifié par Pyanepsion (19 Mar 2024 - 08:24)
Pyanepsion a écrit :
Cette communication est spécifiquement adressée à un public francophone, et par extension, concerne uniquement les noms de famille respectant les conventions orthographiques françaises.

Donc forcément des français "de souche", ce qui exclue potentiellement les personnes naturalisées.

Bref, la question reste très intéressante techniquement, bien que je pense toujours que ce soit une erreur. J'essaierai de faire une proposition lorsque j'aurais un moment. En attendant, considérez que vous pouvez à la fois :
- créer un système de vérification/validation de l'entrée,
- mais aussi créer un assistant à la frappe, soit qui met en forme en temps réel (event "input"), soit à la perte du focus (event "change").

Les deux solutions combinées évitent de la frustration à l'utilisateur.
Modérateur
Bonjour,
Pyanepsion a écrit :
Cette communication est spécifiquement adressée à un public francophone, et par extension, concerne uniquement les noms de famille respectant les conventions orthographiques françaises. Cela implique que la première lettre des mots constituant un nom de famille est systématiquement majuscule dans notre formulaire, à l’exception notable des particules dénotant une appartenance nobiliaire en France (c’est-à-dire « de », « des », « du »). Cette règle s’applique sans exception dans notre contexte.
Donc en résumé, vous n'appliquez pas les règles du français.
Pyanepsion a écrit :
Si le formulaire est configuré correctement, Victor de Le Rue sera accepté conformément aux règles établies, illustrant ainsi notre capacité à accommoder les noms respectant la graphie française, y compris ceux comportant des particules nobiliaires.
Ha mais là, tu n'as pas bien compris. La règle, c'est qu'on écrit "De Le Rue" et non pas "de Le Rue" que seuls les gens de peu de culture oseraient employer !

Il s'appelle comment, ce dialecte réducteur que tu essaies de répandre ? Smiley biggrin

Amicalement,
Au final, ce n'est pas réellement un problème technique, c'est vraiment un problème de conception. Que cherchez:vous au final : une intégrité des donnés quitte à laisser des utilisateurs sur le carreau ? Mais dans quel but ? Qu'est-ce qui pourrait être suffisamment important comme projet pour le justifier ?

Quand on vous comment certains services publics enregistrent nos identités...
Modifié par Olivier C (19 Mar 2024 - 20:58)
Hello !

Je rejoins Olivier et Parsimonhi au niveau de la conception. C'est presque impossible de faire une Regex qui n'exclue pas certains utilisateurs. Et ça c'est jamais bon Smiley smile

De plus, la Regex au niveau de ton champ de formulaire te garanti uniquement que le format est respecté côté front-end. Il est toujours possible de forger une requête et envoyer les données qu'on veut à ton serveur. La règle d'or c'est de toujours effectuer les vérifications côté serveur en priorité.

Good luck Smiley smile
J’ai amélioré la formule de vérification des noms de famille et augmenté un peu le nombre de lettres accentuées.
/^((De|La|Mc|Mac|[DOL][’'])[A-ZÉÈÀÛÙÏÎÔÖÇÆ][a-zéèàûùïîôöçæ'’]*|([A-ZÉÈÀÛÙÏÎÔÖÇÆ][a-zéèàûùïîôöçæ'’]*))([\s\-'’](De|La|Mc|Mac|[DOL][’'])[A-ZÉÈÀÛÙÏÎÔÖÇÆ][a-zéèàûùïîôöçæ'’]+|[\s\-'’][A-ZÉÈÀÛÙÏÎÔÖÇÆ][a-zéèàûùïîôöçæ'’]+)*$/gm

Avec cette formule, on peut vérifier :
McDonald's MacGregor O'Connor L'Écuyer D’Estaing Tour-Dupin Tour'sa DeMill

Il reste le problème des particules nobiliaires. Elles s’écrivent en minuscules sauf dans de rares cas (les noms d’origine italienne) dont ne ferait pas partie Xavier de Le Rue .

Le problème se pose au début du nom de famille et au milieu du nom de famille, sans oublier que la même particule doit s’écrire avec une majuscule quand le nom n’est pas noble. Il faut donc autoriser les deux.

Wikipédia résume bien les règles en vigueur Particule (onomastique). Dans un premier temps seul m’intéresse les particules nobiliaires française (d’, de, des, du).
C'est très spécifique, il y a forcément des utilisateurs qui vont passer au travers, vous ne pourrez pas penser à tous les cas de figures... mais je vais arrêter avec ça, moi-même et les autres intervenants vous l'on suffisamment asséné...

En plus de votre regex, pensez bien à utiliser une fonction `.trim()`, éventuellement un traitement sur les chiffres (`\d`) car, ça au moins, même au niveau mondial on est sûr que ce n'est pas possible (pour l'instant).
Administrateur
Bonjour,

je plussoie le sentiment général : "comment s´appellent #lesGens" est bien plus complexe que ça... Noblesse reconnue il y a 1.000 ans ou d´Empire ou padchénous, enfant portant le nom du ou des parents, dans un ordre indifférent, naturalisations, régionalismes (coucou Fañch enfin là c´est un prénom...), ancien secrétaire d´État dont le nom est composé d´une seule lettre (Cédric O, ne pas confondre avec Steve-O Smiley biggol ), nom d´usage (Johnny...).
La bonne pratique est de proposer un champ unique "Vot´ nom" et de pas chercher plus loin, de pas demander si on est un homme ou à une femme alors que l´info n´a aucun intérêt, etc C´est plus simple, plus respectueux et c´est moins cher en terme de budget de dév ! Smiley baille

Le Système de Design de l'État a des billes à propos du Nom Prénom https://www.systeme-de-design.gouv.fr/elements-d-interface/blocs-fonctionnels/nom-et-prenom
mais ensuite les administrations trichent avec l´article 1 "L´administration a toujours raison" Smiley kneu
Intéressant ton lien Felipe. Il confirme la démarche que nous avons suivie lors de la création du nouveau compte. Il ne s’agit cependant pas tout à fait de cela ici.

La gestion et la validation des données d’entrée, en particulier des noms d’utilisateurs dans un contexte culturel francophone spécifique, nous amènent toutefois à réfléchir profondément sur les implications de nos choix techniques. Lorsque nous appliquons des filtres pour normaliser ou valider ces données, chaque décision prise réduit l’espace des possibilités, influençant directement qui peut ou ne peut pas interagir avec notre système. Voici une perspective renouvelée sur ce processus, visant à souligner l’importance de chaque étape de filtrage :

1. Utilisation d’Unicode : En partant d’un univers de 1 114 112 points de code possibles, nous embrassons la diversité linguistique mondiale. Mais même à cette échelle, nous avons déjà réduit les choix possibles.

2. Choix d’une zone spécifique d’Unicode : En nous limitant au Plan Multilingue de Base, nous nous concentrons sur un ensemble plus gérable de 65 536 points de code. Cette étape va permettre de déterminer quels langages et scripts nous considérons.

3. Filtrage du code latin : En affinant davantage pour inclure uniquement les caractères latins, notre champ se réduit à 1 387 caractères.

4. Sélection des majuscules : Cette sélection reflète non seulement un choix esthétique, mais aussi une décision culturelle, rappelant que chaque caractère porte en lui une histoire et une identité. En nous concentrant sur ceux de type « Lu » (Letter Uppercase) et « Lt » (Letter Titlecase) pour capturer l’essence des lettres majuscules, nous arrivons à 481 caractères, mais plus que 477 si nous ne retenons que ceux portant « CAPITAL » (Lettre capitale) dans leur nom officiel, et 54 si nous filtrons par la fusion des intervalles [A-Z][À-Û] souvent rencontrés. Cette précision nous permet de naviguer dans la complexité de l’écriture latine tout en respectant les nuances typographiques. Pareil pour les minuscules.

5. Impact du choix de la police : Finalement, en sélectionnant une police, nous nous engageons sur une voie où, souvent, seuls 100 à 150 caractères majuscules sont privilégiés (et souvent moins en minuscules), sur un ensemble fréquemment d’environ 400 à 600 caracères en tout. Cela montre comment le design et la technique se rencontrent, affectant l’expérience utilisateur.

Dans le cadre de notre initiative, nous filtrons les utilisateurs déjà enregistrés pour des prestations culturelles francophones, et qui veulent utiliser leur patronyme comme un élément clé respectant des normes typographiques strictes. L’enjeu est de guider l’utilisateur dans sa saisie pour lui éviter les erreurs de saisie, tout en gérant les exceptions de manière efficace et inclusive.

Sur le plan technique, il s’agit d’une saisie en PascalCase, une méthode où chaque sous-mot commence par une lettre majuscule sans espaces intermédiaires, avec des exceptions entièrement en minuscules. Ce sont ces dernières qui posent problème tout en nécessitant une attention particulière pour accompagner l’utilisateur sans le contraindre inutilement.

Cette démarche est loin d’être un simple exercice technique. Elle nous interpelle sur notre capacité à concevoir des systèmes à la fois inclusifs et respectueux des diversités culturelles et linguistiques. En nous penchant sur cette question, nous ne cherchons pas seulement à résoudre un défi technique, mais aussi à réfléchir aux valeurs que nous souhaitons que notre système incarne : l’accessibilité, le respect et l’inclusivité.

Je vous invite donc à nous rejoindre dans cette réflexion, pour ensemble explorer les meilleures pratiques et innovations pouvant soutenir ces principes fondamentaux. Cette démarche est cruciale pour s’assurer que notre système soit accueillant pour tous, dans le respect des identités et des patrimoines linguistiques.
Modifié par Pyanepsion (20 Mar 2024 - 13:21)