Ответ 1
Есть один способ:
^(?=[0-9]*$)(?:.{8}|.{11})$
или, альтернативно, если вы хотите сначала выполнить проверку длины,
^(?=(?:.{8}|.{11})$)[0-9]*$
Таким образом, у вас есть сложная часть только один раз и общий .
для проверки длины.
Объяснение:
^ # Start of string
(?= # Assert that the following regex can be matched here:
[0-9]* # any number of digits (and nothing but digits)
$ # until end of string
) # (End of lookahead)
(?: # Match either
.{8} # 8 characters
| # or
.{11} # 11 characters
) # (End of alternation)
$ # End of string