189 votes

Comment mettre en forme une chaîne comme un numéro de téléphone en c#

J'ai une chaîne "1112224444" c'est un numéro de téléphone. Je veux format 111-222-4444 avant que je le stocker dans un fichier. C'est sur un datarecord et je préfère être en mesure de le faire sans l'attribution d'une nouvelle variable.

Je pensais:

String.Format("{0:###-###-####}", i["MyPhone"].ToString() );

mais cela ne semble pas faire l'affaire.

** Mise à JOUR **

Ok. Je suis allé avec cette solution

Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")

Maintenant sa se foiré lorsque l'extension est inférieure à 4 chiffres. Il remplira dans les numéros à partir de la droite. donc

1112224444 333  becomes

11-221-244 3334

Des idées?

221voto

Sean Points 2766

D’une bonne page pleine d’exemples :

Bien qu’une expression régulière peut fonctionner encore mieux, gardez à l’esprit la vieille citation de programmation :

Certaines personnes, lorsqu’elles sont confrontées à un problème, pense que « Je sais, je vais utiliser des expressions régulières. » Ils ont maintenant deux problèmes.
--Jamie Zawinski, dans comp.lang.emacs

197voto

Ryan Duffield Points 7602

Je préfère utiliser des expressions régulières :

53voto

Jon Skeet Points 692016

Vous aurez besoin de le casser en sous-chaînes. Alors que vous pourriez faire cela sans n’importe quelles variables supplémentaires, il ne serait pas particulièrement agréable. Voici une solution :

41voto

Jerry Nixon - MSFT Points 12256

Je suggère cela comme une solution propre pour les numéros américains.

 public static string PhoneNumber(string value)
{ 
    value = new System.Text.RegularExpressions.Regex(@"\D")
        .Replace(value, string.Empty);
    value = value.TrimStart('1');
    if (value.Length == 7)
        return Convert.ToInt64(value).ToString("###-####");
    if (value.Length == 10)
        return Convert.ToInt64(value).ToString("###-###-####");
    if (value.Length > 10)
        return Convert.ToInt64(value)
            .ToString("###-###-#### " + new String('#', (value.Length - 10)));
    return value;
}
 

28voto

mattruma Points 7742

Autant que je sache que vous ne pouvez faire cela avec de la ficelle. Format... vous devrez gérer vous-même. Vous pourriez juste enlever tous les caractères non numériques et puis faire quelque chose comme :

Cela suppose que les données ont été entrées correctement, que vous pourriez utiliser des expressions régulières pour valider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X