You cannot reasonably check all constraints with Regex.
I would first check coded for the cases 7,9,10, e.g. in this sequence (pseudo code):
all cases:
string s = name.Trim();
.
Case 9:
if (s != name) --> error (leading/trailing spaces)
.
Case 10:
if (s == "-") --> error (dash-only name)
.
Case 7:
if (s.Length > 200) --> error(name too long)
.
Then you could check for the patterns. E.g. to make it localization aware, you need
Unicode General Categories[
^] instead of the plain 7 bit ASCII character sets.
Regex for cases 1-6, 8, 11:
^[-\w][-\s\w]*(?:[.][\p{L}\p{N}]+)?$
Cheers
Andi