OriginalGriff
Прежде всего, решите, какой язык вы используете: решение JS не будет идентично решению Java или C#.
Предполагая, что C#, ваше выражение работает нормально:
string pattern1 = @"\d{9}|\d{3}-\d{2}-\d{4}|\d{3}-\d{6}|\d{5}-\d{4}";
Regex reg = new Regex(pattern1);
if (reg.IsMatch("123456789")) Console.WriteLine("9 OK");
if (reg.IsMatch("123-45-6789")) Console.WriteLine("3-2-4 OK");
if (reg.IsMatch("123-456789")) Console.WriteLine("3-6 OK");
if (reg.IsMatch("12345-6789")) Console.WriteLine("5-4 OK");
Дает:
9 OK
3-2-4 OK
3-6 OK
5-4 OK
Единственное различие, которое я бы сделал, - это добавить начальные и конечные символы строки:
string pattern1 = @"^\d{9}|\d{3}-\d{2}-\d{4}|\d{3}-\d{6}|\d{5}-\d{4}$";
Regex reg = new Regex(pattern1);
Так в чем же проблема?