Удалить символ в C # - PullRequest
       6

Удалить символ в C #

0 голосов
/ 19 февраля 2019

System.FormatException: входная строка была в неправильном формате.это потому, что входные данные должны быть только числами, но мой ввод должен быть в формате 555-555-5555, что является обязательным требованием.Вот мой JS, чтобы сделать это:

$(window).load(function () {

            $("#phoneNumber").inputmask("***-***-****");
        });

А вот мой C # для отображения значения в этом формате (555) 555-5555, проблема возникает здесь

 public static string phoneFormat(string phone)
        {

            //string[] splitNr = phone.Split('-');
           // return ("(" + splitNr[0] + ")" + splitNr[1] + "-" + splitNr[2]);
             string[] number = phone.Split();

            return string.Format("{0:(###) ### - ####}",ulong.Parse(phone));//ERROR
        }

, еслиЯ использую закомментированную часть, это работает, но я хочу использовать способ разбора.Как убрать «-» в C # после того, как пользователь введет его в пользовательский интерфейс, а затем отобразить номер в этом формате (555) 555-5555.Спасибо

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Ради интереса мы можем сделать это:

return string.Format("{0:(###) ### - ####}",ulong.Parse(phone.Replace("-", "")));

Но я бы на самом деле удалил маску ввода .Да, используйте html / javascript, чтобы помочь пользователю вводить хорошие данные, но делайте это так, что это на 1006 * намного более допустимо.Если я введу 5551234567, 555.123.4567, (555)123-4567 или даже намного хуже, вы сможете справиться с любым из них.
Маски ввода обычно плохой UI / UX .

На C # я действительно разделил бы это на две части: нормализация , где я очищаю потенциально грязный ввод для хранения и проверки и форматирование ,где я беру нормализованные данные и форматирую их для отображения.Причина для двух шагов заключается в том, что зачастую с точки зрения хранения и индексации гораздо эффективнее хранить базовое (неформатированное) значение.Более того, иногда пользователи хотят видеть одни и те же данные, представленные по-разному.Теперь мне легко иметь разные параметры формата для одного и того же значения.Некоторые люди также включают проверка в качестве своей собственной фазы, но я хотел бы сделать это как часть нормализации данных.

Таким образом, для действительно базового номера телефона я бы обработалкод, подобный следующему:

public static string NormalizePhone(string phone)
{
    // **We should give the user the benefit of the doubt.**
    // I don't care what crazy format they used, if there are 10 digits, we can handle it.

    //remove anything not a digit
    var digits = Regex.Replace(phone, @"[^\d]", ""); 

    //ensure exactly 10 characters remain
    if (digits.Length != 10) throw new InvalidArgumentException($"{phone} is not a valid phone number in this system.");

    return digits;
}

// Phone argument should be pre-normalized,
//    because we want to be able to use this method with strings retrieved
//    from storage without having to re-normalize them every time.
//    Remember, you'll show a repeat value more often than you receive new values.
public static string FormatPhone(string phone)
{
    //Even better if you have an Assert() here that can show phone is always pre-normalized in testing, but works to a no-op in production.

    return Regex.Replace(phone, @"(\d{3})(\d{3})(\d{4})", "($1) $2 - $3");
}

Теперь ваш существующий код может вызывать их вместе:

try 
{
     FormatPhone(NormalizePhone(phone));
}
catch(InvalidArgumentException ex)
{
    // This won't happen often.
    // The html/js layer should stop it in most cases,
    // such that we meet the rule of reserving exception handling for actual exceptional events.
    // But you'll still want to add a meaningful handler here.
}

Но на самом деле я бы сам назвал NormalizePhone(), чтобы подготовить это необработанное значение ксохраните запись пользователя, а затем FormatPhone(), чтобы отобразить пользователя на экране.

Наконец, это упрощенный порт. Проверка действительного номера телефона может быть довольно сложной.Ссылка в значительной степени стандартная работа в этой области, и это колоссальные 12 МБ исходного кода.

0 голосов
/ 19 февраля 2019

Проще обрабатывать его как строку, а не пытаться разобрать, а затем отформатировать как число:

return Regex.Replace(phone, @"(\d{3})-(\d{3})-(\d{4})", "($1) $2 - $3")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...