checkedListBox. Удалить несколько символов, поставить вместо них свои

238
22 августа 2017, 10:39

Собственно, всё на картинке. Юзверь может ввести три типа номера: +79, 79, 89 с одинаковым телом. Если номер начинается на +79, то нужно убрать три символа, если с 79 или 89, то два, а вместо этого поставить +79.

Как реализовать?

Answer 1

Добрый день!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace ConsoleApp1
{
    class Program
    {
        static string StringRepl(string Str)
        {
            string pattern = @"^(\+79|79|89)[ ]?";
            string Result;
            Regex reg = new Regex(pattern);
            Result = reg.Replace(Str,"+79");           
            return Result;
        }
        static void Main(string[] args)
        {
            while (1 == 1)
            {
                string StrA;
                StrA = Console.ReadLine();
                Console.WriteLine(StringRepl(StrA));
                if (Console.ReadKey().Key == ConsoleKey.E) { break; };
            }
        }
    }
}
Answer 2

Предлагаю лучше сделать как в комменте @Андрей, иначе:

string nomertelefona = GetValidString(inputstring);
string GetValidString(string inputstring)
{
    if (inputstring.StartWith("+"))
         inputstring = inputstring.Substring(1);
    return string.Format("+79{0}", inputstring.Substring(2));
}

Если понадобиться extension method:

public static string GetValidString(this string inputstring) // Метод расширения
    {
        if (inputstring.StartWith("+"))
             inputstring = inputstring.Substring(1);
        return string.Format("+79{0}", inputstring.Substring(2));
    }
Answer 3

Сделайте ввод телефона по маске, можете поискать готовый контрол (благо их куча) или самостоятельно сделайте что-то типа такого:

Выбор кода страны можно сделать, например из выпадающего списка.

Право, вы как будто никогда в жизни ни одной формы не заполняли в приложениях или на сайтах.

У TextBox есть полезные свойства для организации такого ввода, такие как MaxLength.
Чтобы пользователь мог вводить только цифры, можете воспользоваться, например, этим ответом.
Ну и не забудьте установить этим "кусочкам" нужные значения TabIndex

Upd. Давно не открывал WinForms, оказывается здесь есть стандартный контрол "из коробки" - MaskedTextBox, у которого есть свойство Mask и даже набор стандартных масок на выбор.
Ниже скрины того, что можно сочинить из ComboBox + MaskedTextBox

READ ALSO
Класс ObservableCollection<T> и функция IndexOf

Класс ObservableCollection<T> и функция IndexOf

Добрый день столкнулся с такой проблемой: функция IndexOf класса ObservableCollection всегда возвращает -1Вот код:

280