Отформатировать номер телефона под шаблон c#

String tel_str = "0982468089";

Как из номера телефона 0982468089 сделать (098) 246-80-89

Возможно через Regex.Replace это делается, но не нахожу как


Ответы (1 шт):

Автор решения: Alexander Petrov

Давайте заморочимся и сделаем универсальную функцию, создающую форматтеры по задаваемому шаблону.

public static Func<string, string> CreateFormatter(string input, string pattern)
{
    var charMap = new Dictionary<int, char>();

    for (int i = 0; i < pattern.Length; i++)
    {
        if (!input.Contains(pattern[i]))
        {
            charMap.Add(i, pattern[i]);
        }
    }

    Func<string, string> formatter = s =>
    {
        foreach (var kvp in charMap)
        {
            s = s.Insert(kvp.Key, kvp.Value.ToString());
        }
        return s;
    };

    return formatter;
}

Номер телефона, который вы представили, состоит из десяти символов. Поэтому на входе нашей функции - строка из десяти символов. Это необязательно цифры, могут быть любые символы.

Вторым параметром идёт шаблон. В нём присутствуют те же самые десять символов и любые другие символы, которые нужно добавить: скобки, пробел, тире и т. п.

Использование:

var formatter = CreateFormatter("1234567890", "(123) 456-78-90");
//var formatter = CreateFormatter("abcdefghij", "(abc) def-gh-ij");

string phone = "0982468089";
string result = formatter(phone);

Console.WriteLine(phone);
Console.WriteLine(result);
→ Ссылка