^(\d{3}|\d{6})$
У вас должен быть какой-то терминатор, иначе \d{3}
будет соответствовать 1234. Вот почему я положил ^ и $ выше. Один из вариантов заключается в использовании поисковых запросов:
(?<!\d)(\d{3}|\d{6})(?!\d)
, чтобы убедиться, что ему не предшествует цифра (или в этом случае). Больше в Утверждения нулевой ширины Lookahead и Lookbehind .
Как насчет:
(\d\d\d){1,2}
, хотя вам также понадобятся охранники с любого конца, которые зависят от вашего двигателя RE: что-то вроде:
[^\d](\d\d\d){1,2}[^\d]
или:
^(\d\d\d){1,2}$
Первый соответствует 3, 6, но также 9, 12, 15, .... Второй выглядит правильно. Вот еще один поворот:
\d{3}\d{3}?