[0-9]+(\.[0-9][0-9]?)?
Прежде всего, я рекомендую проверить либо regexr.com, либо regex101.com, чтобы вы сами поняли, как работает регулярное выражение.  Оба веб-сайта дадут вам пошаговое объяснение того, что делает каждый символ в регулярном выражении.
Теперь одна из основных вещей, которую вы должны понять, это то, что регулярное выражение имеет специальные символы.  Это включает, среди прочего, следующее: []().-+*?\^$.  Итак, если вы хотите, чтобы ваше регулярное выражение соответствовало, например, буквальному ., вам придется его экранировать, поскольку это специальный символ.  Для этого используйте либо \., либо [.].  Обратная косая черта служит для экранирования других символов, а [] означает «соответствует любому из символов в этом наборе».  Некоторые специальные символы не имеют специального значения внутри этих скобок и не требуют экранирования.
Следовательно, приведенное выше регулярное выражение будет соответствовать любой комбинации цифр длиной 1 или более, за которыми следует необязательный суффикс (foobar)?, который должен быть точкой, за которой следует одна или две цифры.  На самом деле, это регулярное выражение больше похоже на то, что оно должно сопоставлять десятичные числа с двумя цифрами после точки, а не телефонные номера.
/^[0-9()]+$/
То, что это делает, довольно просто - соответствует любой комбинации цифр или круглых скобок, которая имеет длину 1 или больше.
[0-9().+\s?](\.[0-9][0-9]?)?
То, что вы сопоставляете здесь, это:
- одно из: цифра, круглая скобка, точка, плюс, пробел или вопросительный знак;  но ровно один раз только!
- необязательно, за которым следует точка и одна или две цифры
Подходящим регулярным выражением для вашей цели может быть:
(\+\d{2})?((\(0\)\d{2,3})|\d{2,3})?\d+
Введите это на одном из упомянутых выше веб-сайтов, чтобы понять, как это работает.  Я немного изменил его, чтобы также разрешить, например, +49 123 4567890. Кроме того, для простоты я не включил пробелы, поэтому при использовании этого регулярного выражения вы должны сначала удалить все пробелы в своем вводе.  В C# это должно быть возможно с помощью yourString.Replace(" ", ""); (простая замена всех пробелов ничем = удаление пробелов)
                        
                            01.02.2018