If you want to match the variations in the question, you might use a pattern like:
^(?:\+?(?:00)?(?:49|\(49\))|\(\+49\))(?: *\(\d{4}\)|(?: ?\d){4})? *\d\d(?:[ -]?\d\d){2}$
Explanation
^
Start of string
(?:
Non capture group
\+?
Match an optional +
(?:00)?
Optionally match 2 zeroes
(?:49|\(49\))
Match 49 or (49)
|
Or
\(\+49\)
Match (+49)
)
Close non capture gruop
(?:
Non capture group
*
Match optional spaces
\(\d{4}\)
Match (
4 digits and )
|
Or
(?: ?\d){4}
Repeat 4 times matching an optional space and a digit
)?
Close non capture group and make it optional
*
Match optional spaces
\d\d
Match 2 digits
(?:[ -]?\d\d){2}
Repeat 2 times matching either a space or -
followed by 2 digits
$
End of string
Regex demo
Or a bit broader variation matching the 49
prefix variants, followed by matching 10 digits allowing optional repetitions of what is in the character class [ ()-]*
in between the digits.
^(?:\+?(?:00)?(?:49|\(49\))|\(\+49\))(?:[ ()-]*\d){10}$
Regex demo