J'ai une chaîne "1112224444" c'est un numéro de téléphone. Je veux formater comme 111-222-4444 avant de le stocker dans un fichier. Il est sur un enregistrement de données et je préférerais pouvoir le faire sans attribuer un nouveau variable.
Je pensais:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
mais cela ne semble pas faire l'affaire.
** METTRE À JOUR **
D'accord. Je suis allé avec cette solution
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Maintenant, il est foiré lorsque l'extension est inférieure à 4 chiffres. Il remplira les nombres de la droite. alors
1112224444 333 becomes
11-221-244 3334
Des idées?
c#
string
formatting
phone-number
Brian G
la source
la source
Réponses:
Veuillez noter que cette réponse fonctionne avec les types de données numériques (int, long). Si vous commencez par une chaîne, vous devrez d'abord la convertir en nombre. Veuillez également prendre en compte le fait que vous devrez valider que la chaîne initiale comporte au moins 10 caractères.
À partir d'une bonne page pleine d'exemples:
Bien qu'une expression régulière puisse fonctionner encore mieux, gardez à l'esprit l'ancienne citation de programmation:
la source
Je préfère utiliser des expressions régulières:
la source
// 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");
Vous devrez le diviser en sous-chaînes. Bien que vous puissiez le faire sans aucune variable supplémentaire, ce ne serait pas particulièrement agréable. Voici une solution potentielle:
la source
if (phone.Length == 10)
état.Je suggère cela comme une solution propre pour les chiffres américains.
la source
Autant que je sache, vous ne pouvez pas faire cela avec string.Format ... vous devrez gérer cela vous-même. Vous pouvez simplement supprimer tous les caractères non numériques, puis faire quelque chose comme:
Cela suppose que les données ont été saisies correctement, que vous pouvez utiliser des expressions régulières pour valider.
la source
Cela devrait fonctionner:
OU dans votre cas:
la source
Si vous pouvez obtenir en
i["MyPhone"]
tant quelong
, vous pouvez utiliser lalong.ToString()
méthode pour le formater:Consultez la page MSDN sur les chaînes de format numérique .
Veillez à utiliser long plutôt que int: int pourrait déborder.
la source
2125551-212-1234.
la source
Si vous recherchez un numéro de téléphone (américain) à convertir en temps réel. Je suggère d'utiliser cette extension. Cette méthode fonctionne parfaitement sans remplir les nombres à l'envers. La
String.Format
solution semble fonctionner à l'envers. Appliquez simplement cette extension à votre chaîne.la source
Vous pouvez également essayer ceci:
Production:
la source
Vous pouvez vous retrouver dans la situation où des utilisateurs essaient d'entrer des numéros de téléphone avec toutes sortes de séparateurs entre l'indicatif régional et le bloc de numéro principal (par exemple, des espaces, des tirets, des points, etc.). effacez l'entrée de tous les caractères qui ne sont pas des nombres afin de pouvoir stériliser l'entrée avec laquelle vous travaillez. Le moyen le plus simple de procéder consiste à utiliser une expression RegEx.
Ensuite, la réponse que vous avez énumérée devrait fonctionner dans la plupart des cas.
Pour répondre à ce que vous avez sur votre problème d'extension, vous pouvez supprimer tout ce qui est plus long que la longueur attendue de dix (pour un numéro de téléphone normal) et l'ajouter à la fin en utilisant
Vous voudrez faire une vérification `` si '' pour déterminer si la longueur de votre entrée est supérieure à 10 avant de faire cela, sinon, utilisez simplement:
la source
la source
la source
Essaye ça
À votre santé.
la source
Utilisez Match in Regex pour fractionner, puis générer une chaîne formatée avec match.groups
la source
Ce qui suit fonctionnera sans utilisation d'expression régulière
Si nous n'utilisons pas long.Parse, le string.format ne fonctionnera pas.
la source
La sortie sera: 001-568-895623
la source
Veuillez utiliser le lien suivant pour C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
Le moyen le plus simple de formater est d'utiliser Regex.
Passez votre phoneNum sous forme de chaîne 2021231234 jusqu'à 15 caractères.
Une autre approche serait d'utiliser Substring
la source
Pour résoudre votre problème d'extension, que diriez-vous:
la source
Pas pour ressusciter une vieille question, mais j'ai pensé que je pourrais proposer au moins une méthode un peu plus facile à utiliser, même si une configuration un peu plus compliquée.
Donc, si nous créons un nouveau formateur personnalisé, nous pouvons utiliser le formatage plus simple de
string.Format
sans avoir à convertir notre numéro de téléphone en unlong
Commençons par créer le formateur personnalisé:
Donc, si vous voulez utiliser ceci, vous feriez quelque chose comme ceci:
Quelques autres choses à penser:
À l'heure actuelle, si vous avez spécifié un formateur plus long qu'une chaîne pour formater, il ignorera simplement les signes # supplémentaires. Par exemple, cela
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
donnerait 123-45- donc vous voudrez peut-être qu'il prenne une sorte de caractère de remplissage possible dans le constructeur.De plus, je n'ai pas fourni de moyen d'échapper au signe #, donc si vous vouliez l'inclure dans votre chaîne de sortie, vous ne seriez pas en mesure de le faire actuellement.
La raison pour laquelle je préfère cette méthode à Regex est que j'ai souvent des exigences pour permettre aux utilisateurs de spécifier le format eux-mêmes et il est considérablement plus facile pour moi d'expliquer comment utiliser ce format que d'essayer d'enseigner une expression régulière à un utilisateur.
De plus, le nom de la classe est un peu inapproprié car il fonctionne en fait pour formater n'importe quelle chaîne tant que vous voulez la garder dans le même ordre et simplement injecter des caractères à l'intérieur.
la source
Vous pouvez essayer {0: (000) 000 - ####} si votre numéro cible commence par 0.
la source
Voici une autre façon de procéder.
la source