webForumDet fria alternativet

Formatering av telefonnummer

18 svar · 1 740 visningar · startad av johnkallioniemi

johnkallioniemiMedlem sedan aug. 200534 inlägg
#1

Hej!

Jo jag undrar om det är någon som sitter på en lösning till formatering av telefonnummer inkl mobilnummer tex

085525252 -> 08 - 552 52 52
092012345 -> 0920 - 123 45
0701234563 -> 070 - 123 45 63

lite exempel på hur jag skulle vilja ha det, någon?

voigtann1Medlem sedan juni 20019 519 inlägg
#2

Ska du ha det till alla nummer i Sverige? ;) annars kan du nog fixa det rätt lätt med RegExp.

Exempel på 08 nummret:

^(08)(\d{3})(\d{2})(\d{2})$

vet inte hur php använder med replace men:

$1 - $2 $3 $4
johnkallioniemiMedlem sedan aug. 200534 inlägg
#3

Det bästa hade varit för alla telefonummer i sverige för framtida bruk på sidor osv som kräver det men just för mobilnummer som 073 och 070 samt 08 nummer räcker idag

itpastornMedlem sedan feb. 2007278 inlägg
#4

johnkallioniemi skrev:

Det bästa hade varit för alla telefonummer i sverige för framtida bruk på sidor osv som kräver det men just för mobilnummer som 073 och 070 samt 08 nummer räcker idag

Jag ser ingen annan lösning än att du jobbar med if-satser, eftersom vi inte kan lita på att det är samma antal siffror i varje grupp, eller att ett visst antal siffror automatiskt resulterar i en viss gruppering.

strlen('081234567') är 9
strlen('031123456') är också 9

Mobilnummer är väl alltid tiosiffriga, så det kan nog vara en indikator, men vill du bygga vidare på din lösning i framtiden är det nog bättre att helt enkelt kolla vad som är de inledande siffrorna. Jag skissar på en sådan större lösning.

if ( substr($number,0,2) == '08' ) {
    // 08 -nummer kan ha 7 eller 6 siffror väl?
    if ( strlen($number) == 7 ) {
         // Gruppera 3 - 2 - 2
    } else {
        // Gruppera 2 - 2 - 2
    }
}

Om din lsöning skall växa så är det nog bättre att gå över till en switch-case konstruktion, så koden fortsätter:

else {
    switch ( substr($nummer,0.3) ) {
        case '010':
        case '011':
        case '013'
        // Fortsätt med alla tresiffriga riktnummer
            // Alltid sex siffror i lokala numret? Jag gissar, så kontrollera!
           break;
        case '070':
        case '073':
            // Alltid sju siffror väl i mobilnummer?
        default:
            // Fyra siffror i riktnumret på resten. 
}

Lars Gunther

johnkallioniemiMedlem sedan aug. 200534 inlägg
#5

0920112233 -> 10 siffror men jag ser vad du är ute efter ...blir en fruktansvärd lång lista av cases men antar att det inte finns nått enklare sätt ... får försöka hitta en lista över alla riktnummer och sen bygga det runt många cases och sen spara allt i en separat fil som jag sedan inkluderar i filen som ska kontrolleras

voigtann1Medlem sedan juni 20019 519 inlägg
#6

Tyvärr ;)

johnkallioniemiMedlem sedan aug. 200534 inlägg
#7

kom just på ett sätt att förenkla lite av kontrollen och det är genom att tvinga användaren att fylla i riktnummer och sen resterande exempelvis

Telefon: <input type="text" name="riktnr" maxlength="4"> <input type="text" name="tlfnr" maxlength="6">
spangoMedlem sedan juni 20008 205 inlägg
#8

Kom ihåg bara att alla inte är överens om riktnummer på mobiler. Vissa anser att mobilnummer 0701234567 delas upp 0701 - 23 45 67 snarare än 070 - 123 45 67. De har förstås fel, men de är inte helt få ;) och de kommer förstås också skriva in sina nummer fel i dina två rutor.

pebiMedlem sedan jan. 2005327 inlägg
#9

Tyvärr funkar ju det inte helt 100% ens med att dela upp i riktummerfält och abonentnummerfält.
Det funkar väl strålande för "landlines", men för mobiler.....
Är riktnumret 070, eller 0708 t.ex.
En fråga om tycke och smak då det egentligen inte finns riktnummer för mobiler.

En tanke bara,

/pebi

red: aj sen som vanligt. Ja ja.

johnkallioniemiMedlem sedan aug. 200534 inlägg
#10

vad annat folk är överrens om är ju en sak men om jag tvingar dom att skriva på ett visst sätt så har dom ju inget val än att följa mitt formulär och då får jag ju min vilja igenom, smidigt sätt för att formatera innan det skjuts in i databasen, sen kan jag ju använda en Case sats för att få det precis som jag vill ha det dvs 08- el 031- el 0920-

itpastornMedlem sedan feb. 2007278 inlägg
#11

johnkallioniemi skrev:

vad annat folk är överrens om är ju en sak men om jag tvingar dom att skriva på ett visst sätt så har dom ju inget val än att följa mitt formulär och då får jag ju min vilja igenom, smidigt sätt för att formatera innan det skjuts in i databasen, sen kan jag ju använda en Case sats för att få det precis som jag vill ha det dvs 08- el 031- el 0920-

Gäller din fråga indatakontroll? Jag trodde det handlade om formattering när det skall visas på sidan, enligt första inlägget.

Kom ihåg att samtliga kontroller som görs på klienten kan åsidosättas och att du ändå behöver göra en kontroll med PHP.

Lars Gunther

johnkallioniemiMedlem sedan aug. 200534 inlägg
#12

Nej formateringen sker i 2 steg

1. Vid input till tabellen
2. Vid query från tabellen så att jag kan vara säker på att telefonnummrena visas enligt önskemål

stattinMedlem sedan jan. 2005713 inlägg
#13

itpastorn skrev:

Jag ser ingen annan lösning än att du jobbar med if-satser, eftersom vi inte kan lita på att det är samma antal siffror i varje grupp, eller att ett visst antal siffror automatiskt resulterar i en viss gruppering.

strlen('081234567') är 9
strlen('031123456') är också 9

Mobilnummer är väl alltid tiosiffriga, så det kan nog vara en indikator, men vill du bygga vidare på din lösning i framtiden är det nog bättre att helt enkelt kolla vad som är de inledande siffrorna. Jag skissar på en sådan större lösning.

if ( substr($number,0,2) == '08' ) {
    // 08 -nummer kan ha 7 eller 6 siffror väl?
    if ( strlen($number) == 7 ) {
         // Gruppera 3 - 2 - 2
    } else {
        // Gruppera 2 - 2 - 2
    }
}

Om din lsöning skall växa så är det nog bättre att gå över till en switch-case konstruktion, så koden fortsätter:

else {
    switch ( substr($nummer,0.3) ) {
        case '010':
        case '011':
        case '013'
        // Fortsätt med alla tresiffriga riktnummer
            // Alltid sex siffror i lokala numret? Jag gissar, så kontrollera!
           break;
        case '070':
        case '073':
            // Alltid sju siffror väl i mobilnummer?
        default:
            // Fyra siffror i riktnumret på resten. 
}

Lars Gunther

finns 5 siffriga nummer också

johnkallioniemiMedlem sedan aug. 200534 inlägg
#14

5 siffriga? inte till privatpersoner i alla fall, måste vara nått betalnummer av nått slag du tänker på eller?

stattinMedlem sedan jan. 2005713 inlägg
#15

jo jag har 5 siffrigt.. inte riktnumer om det är det du tänker på.

TroxyMedlem sedan mars 20041 505 inlägg
#16

På exempelvis Gotland har man femsiffriga telefonnummer, utan riktnummer då förstås.

stattinMedlem sedan jan. 2005713 inlägg
#17

jag blir tokig.. numer eller nummer? borde ju vara nummer.. jaja offtopic jag vet.

FlippFloppMedlem sedan apr. 20046 inlägg
#18

I stockholm finns upp till 8-siffriga vet jag, då säget de flesta 08 - 5000 1234.

johnkallioniemiMedlem sedan aug. 200534 inlägg
#19

jag vet här i lule så finns det 0920-12345 el 0920-112233 .... ajja har gjort formuläret nu och ser att alla som har fyllt i det nu har fattat vinken i hur man fyller i riktnr samt telefonummer så jag har fått min formatering mer el mindre som jag vill ha den, sen om man vill vara extra petig och ha den som jag sagt tidigare det är ju en annan sak dvs 08-550 203 22 istället för 08-55020322 ... tror jag nöjer mig med en enklare form av formatering då sidan jag gjort bara ger mig ett par fjuttiga kronor

137 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)