Eu tenho uma sequência "1112224444 ', é um número de telefone. Quero formatar como 111-222-4444 antes de armazená-la em um arquivo. Está em um registro de dados e eu preferiria fazer isso sem atribuir um novo variável.
Eu estava pensando:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
mas isso não parece funcionar.
** ATUALIZAÇÃO **
Está bem. Eu fui com esta solução
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Agora, é uma bagunça quando a extensão tem menos de 4 dígitos. Ele preencherá os números à direita. tão
1112224444 333 becomes
11-221-244 3334
Alguma ideia?
c#
string
formatting
phone-number
Brian G
fonte
fonte
Respostas:
Observe que esta resposta funciona com tipos de dados numéricos (int, long). Se você estiver começando com uma sequência, precisará convertê-la em um número primeiro. Além disso, leve em consideração que você precisará validar se a sequência inicial tem pelo menos 10 caracteres.
Em uma boa página cheia de exemplos:
Embora uma regex possa funcionar ainda melhor, lembre-se da citação de programação antiga:
fonte
Eu prefiro usar expressões regulares:
fonte
// 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");
Você precisará dividi-lo em substrings. Embora você possa fazer isso sem nenhuma variável extra, isso não seria particularmente agradável. Aqui está uma solução em potencial:
fonte
if (phone.Length == 10)
condição.Sugiro isso como uma solução limpa para os números dos EUA.
fonte
Tanto quanto eu sei que você não pode fazer isso com string.Format ... você teria que lidar com isso sozinho. Você pode simplesmente remover todos os caracteres não numéricos e, em seguida, fazer algo como:
Isso pressupõe que os dados foram inseridos corretamente, que você pode usar expressões regulares para validar.
fonte
Isso deve funcionar:
OU no seu caso:
fonte
Se você pode obter
i["MyPhone"]
como along
, pode usar olong.ToString()
método para formatá-lo:Consulte a página MSDN em seqüências de formato numérico .
Tenha cuidado ao usar long em vez de int: int pode estourar.
fonte
2125551-212-1234.
fonte
Se você está procurando um número de telefone (EUA) para ser convertido em tempo real. Eu sugiro usar esta extensão. Este método funciona perfeitamente sem preencher os números ao contrário. A
String.Format
solução parece funcionar ao contrário. Basta aplicar esta extensão à sua string.fonte
Você também pode tentar o seguinte:
Resultado:
fonte
Você pode se encontrar na situação em que há usuários tentando digitar números de telefone com todos os tipos de separadores entre o código de área e o bloco principal de números (por exemplo, espaços, traços, pontos, etc.). retire a entrada de todos os caracteres que não são números, para que você possa esterilizar a entrada com a qual está trabalhando. A maneira mais fácil de fazer isso é com uma expressão RegEx.
Em seguida, a resposta que você listou deve funcionar na maioria dos casos.
Para responder ao que você tem sobre o problema de extensão, você pode remover qualquer coisa que exceda a duração esperada de dez (para um número de telefone comum) e adicioná-lo ao final usando
Você desejará fazer uma verificação "se" para determinar se o comprimento da sua entrada é maior que 10 antes de fazer isso, se não, basta usar:
fonte
fonte
fonte
Tente isto
Felicidades.
fonte
Use Match no Regex para dividir e, em seguida, produza uma string formatada com match.groups
fonte
A seguir, trabalharemos sem o uso de expressões regulares
Se não usarmos long.Parse, o string.format não funcionará.
fonte
A saída será: 001-568-895623
fonte
Por favor, use o seguinte link para C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
A maneira mais fácil de fazer o formato é usando o Regex.
Passe seu phoneNum como string 2021231234 até 15 caracteres.
Outra abordagem seria usar Substring
fonte
Para cuidar do seu problema de extensão, que tal:
fonte
Não para ressuscitar uma pergunta antiga, mas achei que eu poderia oferecer pelo menos um método um pouco mais fácil de usar, se um pouco mais complicado de uma configuração.
Portanto, se criarmos um novo formatador personalizado, podemos usar a formatação mais simples de
string.Format
sem precisar converter nosso número de telefone em umlong
Então, primeiro vamos criar o formatador personalizado:
Então, se você quiser usar isso, faça algo assim:
Algumas outras coisas em que pensar:
No momento, se você especificou um formatador mais longo do que uma string para formatar, apenas ignorará os sinais # adicionais. Por exemplo, isso
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
resultaria em 123-45-, portanto, convém que ele exija algum tipo de caractere de preenchimento possível no construtor.Também não forneci uma maneira de escapar de um sinal de #, portanto, se você quisesse incluir isso em sua string de saída, não seria capaz de como está agora.
A razão de eu preferir esse método ao Regex é que geralmente tenho requisitos para permitir que os usuários especifiquem o formato eles mesmos e é consideravelmente mais fácil explicar como usar esse formato do que tentar ensinar um regex para o usuário.
Além disso, o nome da classe é um pouco inadequado, uma vez que realmente funciona para formatar qualquer sequência, desde que você queira mantê-la na mesma ordem e injetar caracteres dentro dela.
fonte
Você pode tentar {0: (000) 000 - ####} se o seu número de destino começar com 0.
fonte
Aqui está outra maneira de fazê-lo.
fonte