Expresión regular para nombre y apellido.

Resuelto Hellnar asked hace 14 años • 0 respuestas

Para fines de validación del sitio web, necesito la validación del nombre y apellido.

Para el nombre, solo debe contener letras, puede contener varias palabras con espacios y tiene un mínimo de tres caracteres, pero un máximo de 30 caracteres superiores. No se debe validar una cadena vacía (por ejemplo , Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith y jason SMITH ).

Para el apellido, debe ser una sola palabra, solo letras, con al menos tres caracteres, pero como máximo 30 caracteres. Las cadenas vacías no deben validarse (por ejemplo, lazslo , Lazslo y LAZSLO ).

Hellnar avatar Mar 05 '10 16:03 Hellnar
Aceptado

No te olvides de nombres como:

  • Mathías d'Arrás
  • Martin Luther King hijo.
  • Héctor Salchicha-Hausen

Esto debería funcionar para la mayoría de las cosas:

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

O Admite nombres internacionales con Unicode súper dulce:

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

maček avatar Mar 05 '2010 10:03 maček

Hace suposiciones falsas sobre el formato del nombre y apellido. Probablemente sea mejor no validar el nombre en absoluto, salvo comprobar que esté vacío.

Sjoerd avatar Mar 05 '2010 09:03 Sjoerd

Después de revisar todas estas respuestas, encontré una manera de crear una pequeña expresión regular que admita la mayoría de los idiomas y solo permita caracteres de palabras. Incluso admite algunos caracteres especiales como guiones, espacios y apóstrofes. Lo probé en Python y admite los siguientes caracteres:

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

Personajes soportados:

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

He creado una expresión regular personalizada para tratar los nombres:

Probé este tipo de nombres y encontré que funciona perfecto.

  1. John Smith
  2. John D'Largy
  3. John Doe-Smith
  4. John Doe Smith
  5. Héctor Salchicha-Hausen
  6. Mathías d'Arrás
  7. Martin Luther King
  8. Ai Wong
  9. Chao Chang
  10. Alzbeta Bara

Mi RegEx se ve así:

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

Modelo MVC4:

[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 -)") ]

Tenga en cuenta el doble \\para caracteres de escape.

Para aquellos de ustedes que son nuevos en RegEx pensé en incluir una explicación.

^               // 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
Francois Muller avatar Oct 15 '2016 08:10 Francois Muller

Probé casi todo en esta página, luego decidí modificar la respuesta más votada que terminó funcionando mejor. Simplemente coincide con todos los idiomas e incluye .,-' caracteres.

Aquí lo tienes:

/^[\p{L} ,.'-]+$/u
John Boga avatar Dec 21 '2020 17:12 John Boga