У меня есть строка "1112224444", это телефонный номер. Я хочу отформатировать как 111-222-4444, прежде чем сохранить его в файле. Он находится на канале данных, и я бы предпочел сделать это без назначения нового переменная.
Я думал:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
но, похоже, это не сработает.
** ОБНОВИТЬ **
Хорошо. Я пошел с этим решением
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Теперь его портят, когда расширение меньше 4 цифр. Это заполнит числа справа. так
1112224444 333 becomes
11-221-244 3334
Любые идеи?
c#
string
formatting
phone-number
Брайан Дж.
источник
источник
Ответы:
Обратите внимание, что этот ответ работает с числовыми типами данных (int, long). Если вы начинаете со строки, вам нужно сначала преобразовать ее в число. Кроме того, примите во внимание, что вам нужно проверить, что длина начальной строки не менее 10 символов.
С хорошей страницы, полной примеров:
Хотя регулярные выражения могут работать даже лучше, имейте в виду старую цитату программирования:
источник
Я предпочитаю использовать регулярные выражения:
источник
// Remove non-digit characters var phoneDigits = Regex.Replace(crewMember.CellPhone, "[^\\d]", string.Empty); // Format the digits var phone = Regex.Replace(phoneDigits, @"(\d{1,3})(\d{0,3})(\d{0,4})", " ($1) $2-$3");
Вам нужно будет разбить его на подстроки. Хотя вы могли бы сделать это без каких-либо дополнительных переменных, это было бы не особенно приятно. Вот одно из возможных решений:
источник
if (phone.Length == 10)
условии.Я предлагаю это как чистое решение для американских номеров.
источник
Насколько я знаю, вы не можете сделать это с помощью string.Format ... вам придется справиться с этим самостоятельно. Вы можете просто удалить все нечисловые символы, а затем сделать что-то вроде:
Это предполагает, что данные были введены правильно, что вы можете использовать регулярные выражения для проверки.
источник
Это должно работать:
ИЛИ в вашем случае:
источник
Если вы можете получить
i["MyPhone"]
какlong
, вы можете использоватьlong.ToString()
метод для его форматирования:См. Страницу MSDN в строках с числовым форматом. .
Будьте осторожны, чтобы использовать long, а не int: int может переполниться.
источник
2125551-212-1234.
источник
Если вы ищете (США) номер телефона для конвертации в режиме реального времени. Я предлагаю использовать это расширение. Этот метод отлично работает без заполнения чисел в обратном направлении.
String.Format
Решение , как представляется , работать в обратном направлении. Просто примените это расширение к вашей строке.источник
Вы также можете попробовать это:
Вывод:
источник
Вы можете оказаться в ситуации, когда у вас есть пользователи, пытающиеся ввести телефонные номера со всеми видами разделителей между кодом города и блоком основного номера (например, пробелы, тире, точки, т. Д.). удалите ввод всех символов, которые не являются числами, чтобы вы могли стерилизовать ввод, с которым вы работаете. Самый простой способ сделать это с помощью выражения RegEx.
Тогда ответ, который вы перечислили, должен работать в большинстве случаев.
Чтобы ответить на вопрос о расширении, вы можете удалить все, что длиннее ожидаемой длины в десять (для обычного номера телефона), и добавить это в конец, используя
Вы захотите сделать проверку «если», чтобы определить, больше ли длина вашего ввода, чем 10, прежде чем делать это, если нет, просто используйте:
источник
источник
источник
Попробуй это
Приветствия.
источник
Используйте Match в Regex для разделения, затем выведите отформатированную строку с match.groups
источник
Следующее будет работать без использования регулярных выражений
Если мы не используем long.Parse, string.format не будет работать.
источник
Выход будет: 001-568-895623
источник
Пожалуйста, используйте следующую ссылку для C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
Самый простой способ сделать форматирование - использовать Regex.
Передайте свой номер телефона в виде строки 2021231234 до 15 символов.
Другой подход будет использовать Substring
источник
Чтобы позаботиться о проблеме расширения, как насчет:
источник
Не для того, чтобы воскресить старый вопрос, но решил, что я мог бы предложить, по крайней мере, немного более простой в использовании метод, если он немного сложнее в настройке.
Поэтому, если мы создаем новый пользовательский форматер, мы можем использовать более простое форматирование
string.Format
без необходимости конвертировать наш номер телефона вlong
Итак, сначала давайте создадим пользовательский форматтер:
Итак, если вы хотите использовать это, вы бы сделали что-то такое:
Некоторые другие вещи, чтобы думать о:
Прямо сейчас, если вы указали более длинный форматер, чем строку для форматирования, она просто проигнорирует дополнительные знаки #. Например это
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
может привести к 123-45-, так что вы можете захотеть, чтобы он принимал какой-то возможный символ-заполнитель в конструкторе.Кроме того, я не предоставил способ избежать знака #, поэтому, если вы захотите включить его в выходную строку, вы не сможете использовать его так, как сейчас.
Причина, по которой я предпочитаю этот метод, а не Regex, состоит в том, что у меня часто есть требования разрешить пользователям самим определять формат, и мне гораздо проще объяснить, как использовать этот формат, чем пытаться обучить пользователя регулярному выражению.
Кроме того, имя класса немного неправильное, поскольку оно фактически работает для форматирования любой строки, если вы хотите сохранить ее в том же порядке и просто вводить символы внутри нее.
источник
Вы можете попробовать {0: (000) 000 - ####}, если ваш целевой номер начинается с 0.
источник
Вот еще один способ сделать это.
источник