Недостаточно использовать \p{L}
для сопоставления слов, также необходимо сопоставлять диакритические знаки.Это можно сделать, добавив \p{M}
к вашему регулярному выражению.Обратите внимание, что даже класс символов \w
сокращенного «слова» в регулярном выражении .NET по умолчанию также соответствует набору диакритических знаков, \p{Mn}
( Mark, Nonspacing Категория символов Unicode), см. this.NET регулярное выражение .Однако здесь вам нужно \p{M}
, чтобы разрешить любые диакритические знаки.
Обратите внимание, что |
внутри класса символов соответствует буквальному символу |
, поэтому вам нужно удалить |
из вашего шаблона.
Мне кажется, вы используете
@"^[\p{L}\p{M}0-9_-]+$"
Он будет соответствовать любой строке из одной или нескольких букв, диакритических знаков, цифр ASCII, _
или -
символов.
См. regex demo .
Обратите внимание, что если вы хотите разрешить любые символы Unicode, вы можете даже использовать
@"^[\w\p{M}-]+$"
См. еще одно демо