hola, estoy tratando de validar un nombre de persona con una expresión regular pero solo he logrado validar un nombre y no encuentro como repetir esta validación ya sea con un + o un * y agregarle el espacio en blanco
c#
string nombre = "Juan Alvarez";
string expresion = "^[A-Z][a-z]+$";
los nombres son complicados de validar ya que no siguen un orden formal
la expresión puede ser
^[A-Z][a-z]+\s[A-Z][a-z]+$
pero si tiene acentos no lo evaluará (no están incluidas en esa expresión)
los siguientes patrones no serán reconocidos
"Vasco da Gama" (es "da Gama", son 2 cosas)
"Leonardo DiCaprio" (pegado con 2 mayúsculas)
"Reinaldo Dos Santos" (mezcla de las anteriores, notese el "Dos" con mayúsculas)
"Ángel Gómez" (tiene acentos)
Puedes probar con esta expresión, la cual si evalua vocales acentuadas:
string name = "Juan Álvarez"; // .Trim(' ')
string expr = "^[\w\.\-\s]+$";
Regex rgx = new Regex(expr, RegexOptions.IgnoreCase);
Console.WriteLine(rgx.IsMatch(name));
Console.WriteLine(rgx.Match(name));
Para lo demás simplemente asumimos que el usuario conoce su nombre y sabe escribirlo, aceptando posibles inconsistencias como escribir "
David De María" y "
David DeMaría.
PD: Fuera de
.Net tendrías que reemplazar
\w por
\p{Letra} para reconocer caracteres acentuados de la categoría Unicode ...siempre que el motor Regex de ese lenguaje permita su uso (en .Net puedes utilizarlo también, pero es innecesario).
Cita de: d91 en 17 Febrero 2016, 16:45 PMcreo que es mejor sin acentos
Entonces modificando mi expresión, sería así:
"^[A-z\.\-\s]+$"
Saludos!
gracias, estoy haciendo inserciones en una base de datos y creo que es mejor sin acentos porque a veces las consultas devuelven caracteres raros según sea el dbms