var re =new Regex("^([[a-zA-Z_@.-]*[0-9]){0,8}[[a-zA-Z_@.-]*$");
var strings = new[] { "testUser",
"testUser038",
"testUser038@", "testUser@.", "testUser-",
"038testUser",
"testUser123456789",
"123456789",
"123-45-6789",
"testUser123-45-6789",
"testUser^"
};
foreach (var x in strings
.Select(s => new
{
Value = s,
IsMatch = re.IsMatch(s),
}))
{
Console.WriteLine($"{x.IsMatch}: {x.Value}");
}
выводит:
True: testUser
True: testUser038
True: testUser038@
True: testUser@.
True: testUser-
True: 038testUser
False: testUser123456789
False: 123456789
False: 123-45-6789
False: testUser123-45-6789
False: testUser^
Объяснение:
Регулярное выражение выполняет поиск от нуля до 8 цифр, которым может предшествовать любое количество букв (нижний или верхний регистр) или заданное c символов. За шаблоном может следовать (снова) любое количество букв и / или этих символов.
Это «любое число» также может быть нулем.