Entfernen Sie die Formatierung aus einer Zeichenfolge: "(123) 456-7890" = & gt; "1234567890"?
Ich habe einen string, wenn eine Telefonnummer eingegeben wird - es ist eine Maske, damit es immer aussieht wie "(123) 456-7890" - würde ich gerne nehmen Sie die Formatierungen vor dem speichern in die DB.
Wie kann ich das tun?
Kommentar zu dem Problem
John Saunders ist einfach falsch.
@Nikolaus @0xA3 der Punkt John macht ist, dass "C#" und ".NET Framework" sind verschiedene Dinge; eine Frage zum extrahieren einer Zahl aus einem string mit
System.Int32.TryParse
ist nicht wirklich eine C# - Frage, wie es ursprünglich war, markiert. AakashM und John Saunders sind beide richtig.
int.Parse
ist Teil des BCL, nicht C#. @0xA3: et. al. C# - und .NETTO sind nicht das gleiche. Als Fachleute sollten wir versuchen, klar zu sein, auf Unterscheidungen. Dies ist nicht mehr eine C# - Frage, als es ist eine VB.NET oder F# - Frage.
@John - ich denke nicht, dass die OP würde schätzen, eine F# - Lösung. Hinzufügen der .net-tag ist immer noch in Ordnung, obwohl. Die Frage ist sowohl ein
[c#]
und [.net]
Frage. InformationsquelleAutor der Frage Jerrold | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist die Verwendung von linq ist:
Hinzufügen der Reiniger/kürzere version Dank craigmoliver
InformationsquelleAutor der Antwort Matt Greer
Können Sie einen regulären Ausdruck verwenden, um entfernen Sie alle nicht-Ziffer-Zeichen:
Dann weiter - je nach Ihren Anforderungen können Sie entweder speichern Sie die Zahl als string oder als integer. Konvertieren Sie die Zahl in einen integer-Typ haben Sie die folgenden Optionen:
InformationsquelleAutor der Antwort Dirk Vollmar
Da niemand hat eine for-Schleife.
wie folgt verwendet:
Update
Als pr-kommentiert in vielen Ländern haben null am Anfang der Nummer, wenn Sie unterstützen müssen, dann müssen Sie einen string zurückzugeben, der nicht lange. Ändern mein code zu tun, tun Sie Folgendes:
1) Ändern Funktion den Rückgabetyp von long zum string.
2) Stellen Sie die Funktion null zurück, anstatt 0 on error
3) Auf erfolgreichem Parsen machen es wieder PhoneNumberText
InformationsquelleAutor der Antwort EKS
Können Sie es Arbeit für Sie diese Zahl mit dem Zusatz von einem einfachen regex-Ersatz, aber ich würde look out für höhere Initiale Ziffern. Zum Beispiel
(876) 543-2019
ein überlauf einer integer-variable.InformationsquelleAutor der Antwort Joel Coehoorn
InformationsquelleAutor der Antwort Toby
Abgesehen von all den anderen richtigen Antworten, die Speicherung von Telefonnummern, die als ganze zahlen oder andernfalls entfernen der Formatierung könnte eine schlechte Idee.
Hier sind ein paar überlegungen:
(555) 555-5555 ext#343
Die#
Schlüssel tatsächlich auf dem dialer/Telefon, kann aber nicht sein, codiert in einer Ganzzahl. Müssen die Benutzer auch zur Versorgung der*
- Taste.P
), die notwendig sein können für Erweiterungen oder Menü-Systeme, oder die Einwahl in bestimmte Handy-Systeme (z.B. übersee). Auch diese können nicht codiert werden als ganze zahlen.[BEARBEITEN]
Könnte es eine gute Idee zu speichern, die sowohl eine integer-version und eine string-version in der Datenbank. Auch beim speichern von Zeichenfolgen, die Sie reduzieren könnten, alle Satzzeichen, Leerzeichen mit einer der Methoden oben erwähnt. Ein regulärer Ausdruck dafür könnte sein:
InformationsquelleAutor der Antwort Kimball Robinson
Versuchen Sie dies:
Sollten Sie sicher mit diesem, da die Eingabe wird maskiert.
InformationsquelleAutor der Antwort Paul Sasik
Könntest du einen regulären Ausdruck verwenden, oder Sie könnten die Schleife über jedes Zeichen, und verwenden Sie char.IsNumber Funktion.
InformationsquelleAutor der Antwort Chuck Conway
Sie wären besser dran mit reguläre Ausdrücke. Ein int ist per definition nur eine Zahl, aber Sie wünschen die Formatierung von Zeichen zu machen, eine Telefonnummer, das ist ein string.
Gibt es zahlreiche Beiträge über die Telefonnummer Validierung finden Sie unter Eine umfassende regex für die Telefonnummer validation für den Anfang.
InformationsquelleAutor der Antwort JYelton
Wie viele Antworten bereits erwähnt, müssen Sie den Streifen aus dem nicht-Ziffer-Zeichen ersten, bevor Sie versuchen zu analysieren, die Anzahl. Sie können dies tun, mit einem regulären Ausdruck.
Beachten Sie jedoch, dass der größte positive Wert int halten kann, ist 2.147.483.647, so dass jede Nummer mit einer Vorwahl, die größer als 214 würde zu einem überlauf führen. Sie sind besser mit lange in dieser situation.
Führende Nullen werden nicht ein problem für die Nord-amerikanischen zahlen, wie Vorwahlen nicht beginnen mit einer null oder einer eins.
InformationsquelleAutor der Antwort Jeff Caulfield
Alternative ist die Verwendung von Linq:
InformationsquelleAutor der Antwort Holystream
Dies ist im Grunde ein Sonderfall von C#: Entfernen common ungültige Zeichen aus einem string: dieser Algorithmus verbessern. Wo Ihr formatng inkl. White-space behandelt werden, als "schlechtes Zeichen"
InformationsquelleAutor der Antwort Rune FS
InformationsquelleAutor der Antwort Sam Pearson