SEO-Software von Suchmaschinenoptimierung.de

Einheitliches Format Telefonnummern

(hier klicken, um zum Original Thread zu gelangen)
KrickelD
Hallo Leute,

derzeit bastel ich an einer Funktion, die Telefonnummern in das internationale Format bringen soll, komme aber nicht auf den richtigen Weg...

0160 1234567
0160-1234567
+49160 1234567
00491601234567

soll alles zur langen schreibweise werden:

00491601234567

hat jemand von euch eine nette funktion im ärmel?
TrioxX
Wenn überhaupt, kannst du das Ganze höchstens mit preg prüfen und ggf. ins richtige Format ersetzen. Eine andere Lösung ist mir nicht bekannt.

Oder du prüfst auf ein Vorkommnis von 0049 und ersetzt im false Falle einfach...
KrickelD
da liegt mein problem, ich möchte es unabhängig von 49 (also der ländervorwahl) haben...

schritt 1: alle zeichen außer ziffern und + entfernen
schritt 2: wenn es mit + beginnt dann durch 00 ersetzen
schritt 3: wenn es mit 0 beginnt dann durch 0049 ersetzten

dann müsste ich doch alle fälle berücksichtigt haben, oder?
TrioxX
Das wiederspricht sich ja dann im Ergebnis:

Zitat:
schritt 1: alle zeichen außer ziffern und + entfernen


Das dürfte ja kein Problem sein.

Zitat:
schritt 2: wenn es mit + beginnt dann durch 00 ersetzen


Funktioniert nicht mehr, wenn Schritt 1 angewendet wurde

Zitat:
schritt 3: wenn es mit 0 beginnt dann durch 0049 ersetzten


Funktioniert nicht mehr, wenn Schritt 2 angewendet wurde

Das Ganze in 3 Schritten zu machen, halte ich sowieso für unnötig. Entferne einfach alle nicht numerischen Zeichen aus dem Nummernstring und hau direkt nen Regex ala

code:
1:
 ^\(\d{1,2}(\s\d{1,2}){1,2}\)\s(\d{1,2}(\s\d{1,2}){1,2})((-(\d{1,4})){0,1})$ 


drüber (DIN 5008 - http://de.wikipedia.org/wiki/Rufnummer#Schreibweisen)

Ausländische Nummern werden etwas schwieriger, da z.B. in der Schweiz meiens Wissens nach 7-Stellige Rufnummern verwendet werden.

Die Schwierigkeit besteht also nicht unbedingt in der Formatierung, sondern im Abgleich da du ja nicht weißt, ob es sich um eine deutsche Rufnummer, oder um eine ausländische handelt. Oder?

Am wichtigsten ist auf jeden Fall, alle Rufnummern erst einmal einheitlich auf ein numerisches Standard zu bringen.

Du könntest so z.b. auch einfach die ersten beiden Zahlen einer Nummer prüfen und dann falls nötig verändern (da ja deiner Suche nach sämtliche Nummern die nicht 00 entsprechen, korrigiert werden müssen).
KrickelD
so viel arbeit, danke dafür Augenzwinkern

zu schritt 1: Außer, dementsprechend bleiben nur ziffern UND + stehen
ländervorwahlen sind immer zweistellig, die gesamtlänge ist eigentlich egal.

was hälst du davon?

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
<?
    $nr = array("0160 1234567""0160 123 4567""00491601234567""+491601234567""+49160 123 4567""0160-1234567""+47166 123 4567");
    echo "________eingabe______________wird_zu____";
    foreach ($nr as $val) {
        echo "\n_____".str_pad($val,20,"_",STR_PAD_RIGHT).clean_number($val);
    }
    
    function clean_number($nr) {
        if (!empty($nr)) {
            
            $temp preg_replace('/[^0-9,\+]/','',$nr);
            if (substr($temp,0,1)=="0" && substr($temp,1,1)!="0") {
                $temp "0049".substr($temp,1);
            } else $temp str_replace("+""00"$temp);
            return $temp;
            
        } else return "";
    }
?>

liefert
code:
1:
2:
3:
4:
5:
6:
7:
8:
________eingabe______________wird_zu____
_____0160 1234567________00491601234567
_____0160 123 4567_______00491601234567
_____00491601234567______00491601234567
_____+491601234567_______00491601234567
_____+49160 123 4567_____00491601234567
_____0160-1234567________00491601234567
_____+47166 123 4567_____00471661234567
TrioxX
Da hat sich aber jemand Mühe gegeben ^^

Scheint doch zu funktionieren smile
KrickelD
danke smile

da müssten dann alle fälle berücksichtigt sein, oder?
vielleicht könnte man noch ne mindestlänge einbauen
TrioxX
Das sieht nach allen Varianten aus, ja.

Aber das mit der Mindestlänge... Wird knapp. Scheint aber auch unnötig.
moonsword
das if, in dem du prüfst, ob es leer ist, kannst du dir sparen...ich denke nicht, dass es leer aufgerufen wird und wenn, dann macht es nichts aus (weiß nicht, ... wenn du viele telefonnummern durchgehst, dann lohnt es sich vielleicht)

sonst...würde ich für die leichtere verarbeitung später, noch ein leerzeichen oder halt die ländervorwahl klar abtrennen, weil sie 1-3 stellig sein kann.

nummernlänge ist beliebig, und dadurch fast nicht überprüfbar...das einzige was du machen kannst ist die nummer per rückreferenzierung im telefonbuch zu suchen und zu schaun, ob sie existiert, aber auch das ist ja kein sicheres ergebnis smile
KrickelD
das leere return ist zur späteren fehleranalyse, darum steht es noch mit in der funktion.

bei der ländervorwahl kann ich dir (ausnahmsweise mal) nicht zustimmen. nach der umwandlung habe ich immer die ersten 4 zeichen als ländervorwahl, egal aus welchem land und/oder netz.

das leerzeichen kann bei der ausgabe hinzugefügt werden, bei der speicherung hat es noch nichts zu suchen

eine prüfung für telefonbuch etc. wird nicht benötigt weil an diese nummer nachrichten verschickt werden. ist also schnell nachvollziehbar ob es die richtige ist Augenzwinkern
TrioxX
Jetzt klingelts bei mir so langsam, wofür das Ganze überhaupt ist... ^^
moonsword
Zitat:
Original von KrickelD
bei der ländervorwahl kann ich dir (ausnahmsweise mal) nicht zustimmen. nach der umwandlung habe ich immer die ersten 4 zeichen als ländervorwahl, egal aus welchem land und/oder netz.

hehe da muss ich dir widersprechen smile
nehmen wir als beispiel: Lichtenstein mit einer vorwahl: +423
damit hättest du 5 ziffern...
anderes beispiel wäre tschechien, irland (+353), island (+354) usw.
Quelle

also würde dir eine fehlen bei der späteren formatierung...wenn die formatierung aber nicht interressant ist, dann ok...ich denke es hat klar was in der speicherung zu suchen...denn rausnehmen ist viel einfacher als wieder sinnvoll hinzuzufügen Zunge raus

edit: musste nur dran denken an das ganze vorwahl gesocks, weil ich sowas auch irgendwo rumfliegen hab, als ich live anrufe auf meine fritzbox gegengecheckt habe mit meinem adressbuch udn dann bild der person und name und nummer groß auf dem bildschirm ausgegeben habe...und bei mir war irland als vorwahl relativ wichtig

edit2: ach, wenn du 6 ziffern für die vorwahl willst, dann nimm mal Jamaika (+1 876) her smile

amerika an sich hat 6 ziffern für die vorwahl, weil es die +1 ist und dann die regionalvorwahl smile
achja...da hättest du, wenn du regionalvorwahl nicht willst, aber immer noch ein problem, weil es 3 ziffern dann sind Augenzwinkern
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.