Попробуйте это:
@"^(\D*\d){9}\D*$"
Или используйте эту улучшенную версию. Предполагается, что вы хотите соответствовать только 0-9, а не другим символам, которые представляют цифры на других языках. Для повышения производительности также используется группа без захвата:
"^(?:[^0-9]*[0-9]){9}[^0-9]*$"
Вот разбивка того, что это значит:
^ Start of string.
(?: Start a non-capturing group.
[^0-9]* Match zero or more non-digits.
[0-9] Match exactly one digit.
) Close the group.
{9} Repeat the group exactly 9 times.
[^0-9]* Match zero or more non-digits.
$ End of string.
Вот испытательный стенд для него:
string regex = "^(?:[^0-9]*[0-9]){9}[^0-9]*$"
string[] tests = {
"123456789",
"123aeiou456abc789",
"12345678",
"1234567890"
};
foreach (string test in tests)
{
bool isMatch = Regex.IsMatch(test, regex);
Console.WriteLine("{0}: {1}", test, isMatch);
}
Результаты:
123456789: True
123aeiou456abc789: True
12345678: False
1234567890: False