В C # у меня есть следующее регулярное выражение для проверки правильности имен пользователей:
public const string ValidUserNamePattern = @"^(?=.{5,53}$)([\p{L}\w][.!_-]?)*$";
Это должно принимать строки длиной от 5 до 53 символов, все символы, включая диакритические знаки и специальные знаки '.', '!', '_', '-'.
Если кто-то вводит имя, например d'Agostini
или van den Helde
, у нас есть недопустимые символы (пробелы и '). Как я могу напечатать только недействительных символов?
public const string ValidUserNamePattern = @"^(?=.{5,53}$)([\p{L}\w][.!_-]?)*$";
var validString = "TestUsrNèüäme";
var invalidString = "Te st|^us r";
var validUserNameRegEx = new Regex(OpManConstants.ValidUserNamePattern, RegexOptions.Compiled);
if (!validUserNameRegEx.IsMatch(invalidString))
{
// How to get NOT MATCHING character or in other words
// how to get all characters causing the Regex NOT to match?
}
Есть идеи, как это можно сделать в C #?