Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Telefonnummer Format Weltweit (https://www.delphipraxis.net/187721-telefonnummer-format-weltweit.html)

RWarnecke 26. Dez 2015 22:04

Telefonnummer Format Weltweit
 
Hallo zusammen,

ich muss für einen Auftrag bestehende Telefonnummern (weltweit) auslesen und die in einem bestimmten Format abspeichern. Ich gebe mal das Beispiel für Deutschland. Ich kann ja eine Telefonnummer wie folgt schreiben :
  1. +49 711 123456789
  2. +49 (0) 711 123456789
  3. 0049 711 123456789
  4. 0711 123456789
Diese eine Telefonnummer muss ich in dem ersten Format abspeichern. Beim Auslesen kann aber auch das Format 2 - 4 vorkommen. Für Deutschland habe ich es soweit schon erledigt. Jetzt ist meine Frage, gilt dieses auch für die anderen Länder oder gibt es hier Ausnahmen und wenn ja welche ? Habt Ihr dazu irgendwelche Links, wo es für die einzelnen Ländern beschrieben ist ?

Sir Rufo 26. Dez 2015 22:21

AW: Telefonnummer Format Weltweit
 
Ist zwar nicht Delphi, aber du solltest einen guten Überblick und Anhaltspunkt haben

https://github.com/googlei18n/libphonenumber

Medium 27. Dez 2015 01:48

AW: Telefonnummer Format Weltweit
 
Wie sicher kannst du sein, dass alle Rufnummern wohlgeformt hinterlegt sind? (Unabhängig vom genauen Format.)
Kommen nur deutsche Nummern vor, oder kann prinzipiell alles dabei sein?

Das Problem bei Rufnummern ist, dass die Länder- und Ortsvorwahlen keine feste Länge haben. Es gibt Länder mit zweistelligen Nummern, aber auch welche mit 3 Stellen. Auch Ortsvorwahlen können 2-4 Stellen haben, zumindest in Deutschland. Wie es international aussieht weiss ich nicht. Wenn die Eingabe daher nicht garantiert wohlgeformt ist, hast du im Grunde erstmal keine andere Chance als alle Zeichen ausser die Ziffern zu entfernen, und die Nummer bzgl. der Anzeige neu aufzubauen. Um dies zu tun braucht man dann aber fast schon zwingend eine Liste aller Länder- und Ortsvorwahlen weltweit, mit denen man dann Ziffer für Ziffer durchgehen muss um zu ermitteln wo nun die Leerzeichen hin kommen.

Dazu kommt das Problem, dass die sog. Verkehrsausscheidungsziffer (die 0 vor Vorwahlen wenn keine Ländervorwahl gewählt wird, die manchmal in Klammern steht) optional ist, und eben nicht immer in Klammern steht, wenn sie denn überhaupt da steht. Die E.123 Empfehlung sieht es z.B. gar nicht vor diese überhaupt anzugeben, wenn internationale Nummern gemeint sind.

Und da kommt schon das nächste Problem: Sind garantiert alle Nummern mit Ländervorwahl eingetragen? Wenn nicht, dann wird es schon recht fummelig. (Gut, amn kann die daran erkennen, dass sie nicht mit "+", "00" oder "1..9" anfangen. Nichtsdestotrotz eine Verkomplizierung.) Gleiches Spiel für Ortsvorwahlen.

Telefonnummern sind für strukturierte Systeme wie Computer ein Graus. Gewachsenes Kraut.

Ultimativ würde ich die Datenbank (ich vermute mal es steht eine dahinter) anders aufbauen, und für Länder- Orts- Teilnehmer und Durchwahl je ein eigenes Feld nehmen. Dann hat man ein Mal den Aufwand die Bestandsdaten dahin zu überführen, aber ab dann läuft's erheblich geordneter. Und man kann die Darstellung nachher auch noch wunderschön variabel halten und an den Kunden anpassen. (Oder ihm gar die Wahl zwischen verschiedenen Formaten lassen!)

p80286 27. Dez 2015 06:14

AW: Telefonnummer Format Weltweit
 
Steig über die https://de.wikipedia.org/wiki/Telefonvorwahl ein.
oder hier http://www.delphipraxis.net/185349-t...mer-check.html Und verlier nicht aus den Augen wer die Nummer(n) erfasst hat. US-Amerikaner sehen da einiges anders als Deutsche, und die wiederum anders als Franzosen, um mal ein Beispiel zu nennen.

Gruß
K-H

sh17 27. Dez 2015 08:12

AW: Telefonnummer Format Weltweit
 
Zitat:

Zitat von Sir Rufo (Beitrag 1325328)
Ist zwar nicht Delphi, aber du solltest einen guten Überblick und Anhaltspunkt haben

https://github.com/googlei18n/libphonenumber

Hier bist Du definitiv richtig. Die Lib als DLL zu kompilieren habe ich aber noch nicht geschafft. Ich versuche deshalb das ganze per Java-JNI einzubinden.

Als Einstieg wäre auch eine Delphi-Variante vorhanden

http://sourceforge.net/p/alcinoe/cod...honeNumber.pas

allerdings ist die da genutzte DLL schon etwas älter. Das Projekt auf GitHub erhält sehr oft Aktualisierungen von Formaten und Varianten.

RWarnecke 27. Dez 2015 09:08

AW: Telefonnummer Format Weltweit
 
Guten Morgen,

danke erstmal für die vielen Antworten. Ich hätte nicht gedacht, dass es so kompliziert ist. Ich merke erst jetzt, dass ich meine Frage noch weiter hätte präzisieren müssen. Ich lese die Telefonnummern über das TMS Cloud Pack von dem iCloud Adressbuch aus in einer Windows Anwendung. Da sind die 4 Formate aus meinem ersten Beitrag enthalten. Ich will nicht nach Landesvorwahl, Ortsvorwahl und eigentlicher Rufnummer trennen. Ich möchte lediglich nur das erste Format erhalten aus meinem ersten Beitrag. Für Deutschland prüfe ich ab, ist das erste Zeichen eine Null, dann ersetze ich die 0 durch +49. Für diesen Fall gibt es eine Lokalisierung in den Einstellungen der Windows Anwendung. Steht die (0) mit in der Telefonnummer, lösche ich diese raus und wird die Landesvorwahl mit 0049 angegeben, dann mache ich daraus +49. Mir geht es hauptsächlich darum, kann ich das Prinzip mit der Null bei den Vorwahlen auch für andere Länder übernehmen oder nicht ? Mir geht es darum, dass ich in der Datenbank ein einheitliches Format habe.

p80286 27. Dez 2015 09:52

AW: Telefonnummer Format Weltweit
 
Wenn Du eine 00x in die Hände bekommst, dann kannst Du so vorgehen. Hast Du nur eine oder keine führende Null, dann enthält die Nummer keine Ländervorwahl.
Was mit 49/811.2244557 und ähnlichen Krüppeln ist, steht auf einem ganz anderen Blatt

Gruß
K-H

Sir Rufo 27. Dez 2015 09:54

AW: Telefonnummer Format Weltweit
 
Die 00 hat mit "anderen" Ländern nichts zu tun, denn das ist die Ziffernfolge die in Deutschland eine internationale Rufnummer einleitet.

In jedem Land kann die anders sein (meistens ist das aber gleich) spielt aber keine Geige, wenn sich die Rufnummern auf den Kontext Deutschland beziehen.

Dieses (0) nach dem internationalen Prefix ist eigentlich überflüssig und kann ersatzlos gestrichen werden. Vorsicht aber bei italienischen Rufnummern, da ist die 0 Pflicht.

Es ist eben nicht trivial und das Projekt gibt dir einen Anhaltspunkt wie komplex das Thema ist.

sh17 15. Nov 2020 09:12

AW: Telefonnummer Format Weltweit
 
Falls das mal noch jemand sucht, ich hab einen Wrapper um den C#-Port gebastelt. 32 bit und 64 bit Unterstützung

https://github.com/landrix/LibPhonenumber-for-Delphi

Ich werde das immer aktuell zum Port halten.

TurboMagic 15. Nov 2020 20:15

AW: Telefonnummer Format Weltweit
 
Zitat:

Zitat von sh17 (Beitrag 1477320)
Falls das mal noch jemand sucht, ich hab einen Wrapper um den C#-Port gebastelt. 32 bit und 64 bit Unterstützung

https://github.com/landrix/LibPhonenumber-for-Delphi

Ich werde das immer aktuell zum Port halten.

Da ist ja wohl Mal ein Lob fällig... :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz