2008-11-03 12 views
13

Ich habe ein System, das Telefonnummern als eindeutige Kennungen verwendet. Aus diesem Grund möchte ich alle Telefonnummern formatieren, wie sie in einem normalisierten Format eingehen. Da ich meine Quelldaten nicht kontrollieren kann, muss ich diese Zahlen selbst auslesen und formatieren, bevor ich sie in meine Datenbank einfüge.Telefonnummer Normalisierung: Beliebige bereits vorhandene Bibliotheken?

Ich bin dabei, einen Parser zu schreiben, der Telefonnummern lesen und ein normalisiertes Telefonformat ausgeben kann, aber vorher fragte ich mich, ob jemand schon vorhandene Bibliotheken kannte, mit denen ich Telefonnummern formatieren konnte.

Wenn es keine vorhandenen Bibliotheken gibt, welche Dinge sollte ich beachten, wenn ich diese Funktion erstelle, die nicht offensichtlich ist?

Obwohl mein System derzeit nur mit US-Nummern arbeitet, werde ich versuchen, die Unterstützung für internationale Nummern aufzunehmen, nur für den Fall, dass eine Chance besteht.

Bearbeiten Ich habe vergessen zu erwähnen, ich verwende C# .NET 2.0.

+0

@Dan, ich denke, Sie würden eine bessere Antwort erhalten, wenn Sie uns sagen, welche Sprache_ Sie verwenden. :-) –

+0

Ich habe das C# 2.0-Tag zu dieser Frage hinzugefügt. –

+0

@Joel, ich möchte keinen Edit-Krieg starten, aber ich habe die Frage mit C# 2.0 für einen (ich denke) gültigen Grund versehen: http://StackOverflow.com/Questions/247621/what-are-the -correct-version-numbers-for-c –

Antwort

1

Gerade Streifen aus jeder Nicht-Ziffern, möglicherweise eine RegEx mit: [^\d]

Die einzige Ausnahme wäre, wenn Sie Erweiterungen behandeln möchten, eine Nummer ohne Vorwahl zu unterscheiden, aber mit einer 3-stelligen Erweiterung oder wenn Sie mit internationalen Nummern umgehen müssen.

5

Ich bin derzeit in der OpenMoko Projekt beteiligt, die ein vollständig Open-Source-Handy (einschließlich Hardware) entwickelt. Es hat viel Mühe gegeben, Telefonnummern zu normalisieren. Ich weiß nicht, ob jemand eine gute Lösung gefunden hat. Das größte Problem scheint mit US-Telefonnummern zu sein, da sie manchmal mit einer 1 auf der Vorderseite kommen und manchmal nicht. Je nachdem, was Sie in Ihrer Kontaktliste gespeichert haben, werden die Anrufer-ID-Informationen möglicherweise korrekt angezeigt. Ich würde empfehlen, die 1 auf der Telefonnummer wegzunehmen (obwohl ich erwarten würde, dass die meisten Leute überhaupt nicht hineingehen würden). Möglicherweise müssen Sie auch nach einem Pluszeichen oder einem Ländercode auf der Vorderseite von internationalen Nummern suchen.

Sie können die OpenMoko-Website, die Mailingliste und die Quellcodeverwaltung überprüfen, um festzustellen, ob sie diesen Fehler bereits behoben haben.

11

Sie libphonenumber von Google nutzen könnten. Hier ist ein Blog-Post:

http://blog.appharbor.com/2012/02/03/net-phone-number-validation-with-google-libphonenumber

Parsing Zahlen ist so einfach wie die NuGet package Installation und dann tun dies:

var util = PhoneNumberUtil.GetInstance(); 
var number = util.Parse("555-555-5555", "US"); 

Anschließend können Sie das Zahlenformat wie folgt aus:

util.Format(number, PhoneNumberFormat.E164); 

libphonenumber unterstützt verschiedene Formate außer E.164.

+0

Diese Bibliothek ist genial. Großer Vorschlag. – Junto

0

Was Sie brauchen, ist eine Liste aller Ländercodes und beginnen Sie Ihre Zeichenfolge erste Zeichen mit der Liste der Ländercodes übereinstimmen, um sicherzustellen, dass es richtig ist dann für den Rest der Nummer, stellen Sie sicher, dass es alle Ziffern und der richtigen Länge ist variiert von 5-10 Ziffern.

Um die Überprüfung gegen Ländercodes zu erreichen, installieren Sie NGeoNames nuget, die die Website www.geonames.org verwendet, um eine Liste aller Ländercodes zu erhalten, die verwendet werden, um mit ihnen übereinzustimmen.