205 votes

Expression régulière pour le nom et le prénom

A des fins de validation de site web, j'ai besoin de valider le prénom et le nom de famille.

Pour le prénom, il ne doit contenir que des lettres, peut être composé de plusieurs mots avec des espaces, et comporte un minimum de trois caractères, mais un maximum de 30 caractères. Une chaîne vide ne doit pas être validée (par ex. Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith et jason SMITH ).

Pour le nom de famille, il doit s'agir d'un seul mot, composé uniquement de lettres, comportant au moins trois caractères et au plus 30 caractères. Les chaînes de caractères vides ne doivent pas être validées (par ex. lazslo , Lazslo et LAZSLO ).

303voto

maček Points 25640

N'oubliez pas les noms comme :

  • Mathias d'Arras
  • Martin Luther King, Jr.
  • Hector Sausage-Hausen

Cela devrait suffire pour la plupart des choses :

/^[a-z ,.'-]+$/i

OR Supporter les noms internationaux avec unicode super doux :

/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u

142voto

Sjoerd Points 34671

Vous faites de fausses suppositions sur le format du nom et du prénom. Il est probablement préférable de ne pas valider le nom du tout, sauf pour vérifier qu'il est vide.

66voto

CristianGuerrero Points 1143

Après avoir parcouru toutes ces réponses, j'ai trouvé un moyen de construire une petite regex qui supporte la plupart des langues et ne permet que des caractères de type mot. Elle supporte même certains caractères spéciaux comme les traits d'union, les espaces et les apostrophes. J'ai testé en python et il supporte les caractères ci-dessous :

^[\w'\-,.][^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$

Caractères pris en charge :

abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ'
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는

47voto

Francois Muller Points 367

J'ai créé une expression rationnelle personnalisée pour traiter les noms :

J'ai essayé ces types de noms et je les ai trouvés parfaits.

  1. John Smith

  2. John D'Largy

  3. John Doe-Smith

  4. John Doe Smith

  5. Hector Sausage-Hausen

  6. Mathias d'Arras

  7. Martin Luther King

  8. Ai Wong

  9. Chao Chang

  10. Alzbeta Bara

Mon RegEx ressemble à ceci :

^([a-zA-Z]{2,}\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\s?([a-zA-Z]{1,})?)

MVC4 Modèle :

[RegularExpression("^([a-zA-Z]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-Z]{2,}\\s?([a-zA-Z]{1,})?)", ErrorMessage = "Valid Charactors include (A-Z) (a-z) (' space -)") ]

Veuillez noter que la double \\ pour les caractères d'échappement

Pour ceux d'entre vous qui ne connaissent pas le RegEx, j'ai pensé inclure une explication.

^               // start of line
[a-zA-Z]{2,}    // will except a name with at least two characters
\s              // will look for white space between name and surname
[a-zA-Z]{1,}    // needs at least 1 Character
\'?-?           // possibility of **'** or **-** for double barreled and hyphenated surnames
[a-zA-Z]{2,}    // will except a name with at least two characters
\s?             // possibility of another whitespace
([a-zA-Z]{1,})? // possibility of a second surname

21voto

John Points 60

J'ai essayé presque tout ce qui est proposé sur cette page, puis j'ai décidé de modifier la réponse la plus votée, qui s'est avérée la plus efficace. Elle correspond simplement à toutes les langues et inclut .,-' caractères.

Le voici :

/^[\p{L} ,.'-]+$/u

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X