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).
creo que es mejor sin acentos
Entonces modificando mi expresión, sería así:
"^[A-z\.\-\s]+$"
Saludos!