Ich habe eine Zeichenfolge "1112224444", es ist eine Telefonnummer. Ich möchte sie als 111-222-4444 formatieren, bevor ich sie in einer Datei speichere. Sie befindet sich in einem Datenkabel und ich würde es vorziehen, dies zu tun, ohne eine neue zuzuweisen Variable.
Ich dachte:
String.Format("{0:###-###-####}", i["MyPhone"].ToString() );
aber das scheint nicht den Trick zu tun.
** UPDATE **
OK. Ich habe mich für diese Lösung entschieden
Convert.ToInt64(i["Customer Phone"]).ToString("###-###-#### ####")
Jetzt wird es durcheinander gebracht, wenn die Nebenstelle weniger als 4 Stellen hat. Es wird die Zahlen von rechts ausfüllen. so
1112224444 333 becomes
11-221-244 3334
Irgendwelche Ideen?
c#
string
formatting
phone-number
Brian G.
quelle
quelle
Antworten:
Bitte beachten Sie, dass diese Antwort mit numerischen Datentypen (int, long) funktioniert. Wenn Sie mit einer Zeichenfolge beginnen, müssen Sie diese zuerst in eine Zahl konvertieren. Beachten Sie außerdem, dass Sie überprüfen müssen, ob die ursprüngliche Zeichenfolge mindestens 10 Zeichen lang ist.
Von einer guten Seite voller Beispiele:
Obwohl ein Regex möglicherweise noch besser funktioniert, beachten Sie das alte Programmierzitat:
quelle
Ich bevorzuge reguläre Ausdrücke:
quelle
// 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");
Sie müssen es in Teilzeichenfolgen aufteilen. Sie könnten dies zwar ohne zusätzliche Variablen tun, aber es wäre nicht besonders schön. Hier ist eine mögliche Lösung:
quelle
if (phone.Length == 10)
Zustand gewickelt .Ich schlage dies als saubere Lösung für US-Nummern vor.
quelle
Soweit ich weiß, können Sie dies nicht mit string.Format ... tun, Sie müssten dies selbst erledigen. Sie können einfach alle nicht numerischen Zeichen entfernen und dann Folgendes tun:
Dies setzt voraus, dass die Daten korrekt eingegeben wurden, und Sie können reguläre Ausdrücke zur Validierung verwenden.
quelle
Das sollte funktionieren:
ODER in Ihrem Fall:
quelle
Wenn Sie bekommen können
i["MyPhone"]
alslong
, können Sie das verwendenlong.ToString()
Methode zu formatieren:Weitere Informationen finden Sie auf der MSDN-Seite zu Zeichenfolgen im numerischen Format .
Verwenden Sie lieber long als int: int könnte überlaufen.
quelle
2125551-212-1234.
quelle
Wenn Sie nach einer (US-) Telefonnummer suchen, die in Echtzeit konvertiert werden soll. Ich schlage vor, diese Erweiterung zu verwenden. Diese Methode funktioniert perfekt, ohne die Zahlen rückwärts einzugeben. Die
String.Format
Lösung scheint rückwärts zu funktionieren. Wenden Sie diese Erweiterung einfach auf Ihre Zeichenfolge an.quelle
Sie können dies auch versuchen:
Ausgabe:
quelle
Möglicherweise befinden Sie sich in einer Situation, in der Benutzer versuchen, Telefonnummern mit allen möglichen Trennzeichen zwischen der Vorwahl und dem Hauptnummernblock einzugeben (z. B. Leerzeichen, Bindestriche, Punkte usw.) Entfernen Sie die Eingabe aller Zeichen, die keine Zahlen sind, damit Sie die Eingabe, mit der Sie arbeiten, sterilisieren können. Der einfachste Weg, dies zu tun, ist mit einem RegEx-Ausdruck.
Dann sollte die Antwort, die Sie aufgelistet haben, in den meisten Fällen funktionieren.
Um zu beantworten, was Sie über Ihr Nebenstellenproblem haben, können Sie alles entfernen, was länger als die erwartete Länge von zehn ist (für eine normale Telefonnummer), und dies am Ende mit hinzufügen
Bevor Sie dies tun, sollten Sie eine "Wenn" -Prüfung durchführen, um festzustellen, ob die Länge Ihrer Eingabe größer als 10 ist. Wenn nicht, verwenden Sie einfach:
quelle
quelle
quelle
Versuche dies
Prost.
quelle
Verwenden Sie Match in Regex, um zu teilen, und geben Sie dann eine formatierte Zeichenfolge mit match.groups aus
quelle
Das Folgende funktioniert ohne Verwendung von regulären Ausdrücken
Wenn wir long.Parse nicht verwenden, funktioniert das string.format nicht.
quelle
Die Ausgabe lautet: 001-568-895623
quelle
Bitte verwenden Sie den folgenden Link für C # http://www.beansoftware.com/NET-Tutorials/format-string-phone-number.aspx
Der einfachste Weg, das Format zu erstellen, ist die Verwendung von Regex.
Übergeben Sie Ihre Telefonnummer als Zeichenfolge 2021231234 mit bis zu 15 Zeichen.
Ein anderer Ansatz wäre die Verwendung von Teilzeichenfolgen
quelle
Wie wäre es mit: Um Ihr Erweiterungsproblem zu lösen:
quelle
Um eine alte Frage nicht wiederzubeleben, dachte ich mir, ich könnte zumindest eine etwas einfacher zu verwendende Methode anbieten, wenn auch ein etwas komplizierteres Setup.
Wenn wir also einen neuen benutzerdefinierten Formatierer erstellen, können wir die einfachere Formatierung von verwenden,
string.Format
ohne unsere Telefonnummer in eine konvertieren zu müssenlong
Erstellen wir also zuerst den benutzerdefinierten Formatierer:
Wenn Sie dies also verwenden möchten, würden Sie Folgendes tun:
Einige andere Dinge, über die man nachdenken sollte:
Wenn Sie jetzt einen längeren Formatierer angegeben haben als eine Zeichenfolge zum Formatieren, werden die zusätzlichen # -Zeichen einfach ignoriert. Dies
String.Format(new NumericStringFormatter(),"{0:###-###-####}", "12345");
würde beispielsweise zu 123-45 führen, sodass Sie möglicherweise möchten, dass im Konstruktor ein mögliches Füllzeichen verwendet wird.Außerdem habe ich keine Möglichkeit bereitgestellt, einem # -Zeichen zu entkommen. Wenn Sie dies also in Ihre Ausgabezeichenfolge aufnehmen möchten, können Sie nicht so sein, wie es jetzt ist.
Der Grund, warum ich diese Methode Regex vorziehe, ist, dass ich häufig Anforderungen habe, die es Benutzern ermöglichen, das Format selbst anzugeben, und es für mich erheblich einfacher ist, die Verwendung dieses Formats zu erklären, als zu versuchen, einem Benutzer Regex beizubringen.
Auch der Klassenname ist ein bisschen falsch, da er tatsächlich funktioniert, um eine beliebige Zeichenfolge zu formatieren, solange Sie sie in derselben Reihenfolge halten und nur Zeichen in sie einfügen möchten.
quelle
Sie können {0: (000) 000 - ####} versuchen, wenn Ihre Zielnummer mit 0 beginnt.
quelle
Hier ist eine andere Möglichkeit, dies zu tun.
quelle