Telefonnummern richtig formatieren

  • .NET (FX) 4.5–4.8
  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von GodSec.

    Telefonnummern richtig formatieren

    Hallo liebe Community :thumbsup:

    Ich bin zurzeit stark am verzweifeln...
    Jetzt mein Problem:
    Das Programm (VB.NET) bekommt eine Telefonnummer (z.B. aus dem Internet kopiert oder sonst wo) die , natürlich, immer verschiedene Schreibweisen hat (z.B.: +49 (0)30 123 456 6356, +49 30 710 900 28, 030 1234567 und so weiter..)
    Diese Nummern kann ich nicht an die Telefonanlage Schicken (wegen (); +;- ect.), daher muss ich jetzt diese nummern erst richtig formatieren kurzes Beispiel: +49 (0)30 123 456 6356 muss am ende so 000491234566356 aussehen.
    Doch jetzt gibt es ja noch Orstvorwahlen die sich in der länge unterscheiden und verschiedene Schreibweisen der Nummern.
    Ich habe schon einiges mit RegEx gespielt aber nichts Handfestet.
    Man kann ja auch nicht alle Vorwahlen in das Programm schrieben.
    Ich hoffe auf eure Unterstützung weil ich bin Wirklich am ende. ;(
    Danke Leute :)

    LG GodSec

    Ins richtige Forum verschoben! -Solaris

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Solaris“ ()

    @GodSec Es gibt da nicht all zu viele Möglichkeiten, die musst Du einfach alle durchspielen.
    • Test auf führendes + => Part bis zum 1. Leerzeichen merken
      Folgt danach eine (
      Ja: ==> (a)
      Nein: (b)
    • Alle Leerzeichen entfernen
    • zusammensetzen
    Feddich.
    Und:
    +49 (0)30 123 456 6356 ==> 00049301234566356
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Danke für deine Antwort. So weit war ich auch schon aber das funktioniert auch nicht immer: +49(0)301234566356 wenn z.B. keine Leerzeichen enthalten sind.
    Ich versuche jetzt die Vorwahlen und Ortswahlen aus der Nummer zu lesen aber das wird auch problematisch wenn die nummern nicht richtig formatiert sind, also von Haus aus!
    LG GodSec

    GodSec schrieb:

    wenn z.B. keine Leerzeichen enthalten sind
    machst Du:

    VB.NET-Quellcode

    1. txt = txt.Replace("(", " (")
    2. txt = txt.Replace(")", ") ")
    und weiter im Text.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke @RodFromGermany für deine Hilfe:

    VB.NET-Quellcode

    1. Public Function ConvertNumber() As String
    2. RawNumber = Regex.Replace(RawNumber, "[^0-9+()]", "", RegexOptions.IgnoreCase)
    3. RawNumber = RawNumber.Replace("(", " (")
    4. Dim M As Match = Regex.Match(RawNumber, "^\+([\S\s]*) ")
    5. Dim LandesVorwahl As String = M.Groups(1).Value
    6. RawNumber = Regex.Replace(RawNumber, "[^0-9+()]", "", RegexOptions.IgnoreCase)
    7. RawNumber = Regex.Replace(RawNumber, "^\+", "00", RegexOptions.IgnoreCase)
    8. RawNumber = Regex.Replace(RawNumber, LandesVorwahl & "\(.\)", LandesVorwahl, RegexOptions.IgnoreCase)
    9. Return RawNumber
    10. End Function

    Dachte ich teile meine Arbeit mal :D
    Macht +49 (0) 163 628 6356 zu 00491636286356
    und +449 30 813 9696 zu 00449308139696
    Ich weis der Code ist sicher nicht optimal aber er erfüllt seinen Zweck...
    Wird mich später mal damit nochmal beschäftigen.
    LG
    GodSec
    @GodSec Ich würde RawNumber als Parameter übergeben:

    VB.NET-Quellcode

    1. Public Function ConvertNumber(RawNumber As String) As String
    Nun musst Du Dich davon überzeugen, dass das Verfahren mit allen Arten von Darstellungen klar kommt, ansonsten hast Du Handlungsbedarf. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    GodSec schrieb:

    warum noch ein Parameter?
    Warum eine globale / Klassen-Variable?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    GodSec schrieb:

    @RodFromGermany warum noch ein Parameter?


    Das wäre gutes Code-Design.
    Wenn du das parametrisierst, so ist der Vorgang eine geschlossene Einheit, eine Konvertiereun, und gottlob heisst die Methode ja auch so.
    Und dann versteht man beim Lesen, wozu das gut ist, wie es arbeitet, und sowas kann man dann auch leichter korrigieren und nachbessern.

    Solange da auf iwelche Variablen von ausserhalb zugegriffen wird, ist das immer eine Gleichung mit Unbekannten, oder eine Funktion mit unbestimmten Randbedingungen - oder wie mans ausdrücken will.