Herschrijven van een gsm nummer
Vb: 0475112233 moet herschreven worden naar 32475112233
Vb: 0475 11 22 33 moet herschreven worden naar 32475112233
Ik weet dat er daar php functies voor bestaan maar weet niet goed hoe ik dit moet aanpakken.
In het tweede voorbeeld moeten de spacies er uit + de 32 ervoor en in het eerste voorbeeld dus enkel de 32. Het scriptje moet op beide gevallen voorbereid zijn.
Waar loop je daar precies vast ?
Krijg je foutmeldingen ?
Welke ?
Dit schijnt mijn whitespaces al te verwijderen en dat werkt. Maar hoe ik nu die eerste 0 kan vervangen door 32 weet ik helemaal niet.
Gewijzigd op 19/12/2014 23:31:36 door Brecht S
Code (php)
1
2
3
4
2
3
4
<?php
$var = '0475 11 22 33';
echo preg_replace('/ /', '', preg_replace('/^0/', '32', $var));
?>
$var = '0475 11 22 33';
echo preg_replace('/ /', '', preg_replace('/^0/', '32', $var));
?>
http://php.net/str-replace
Toevoeging op 19/12/2014 23:31:37:
Mits nummer inderdaad altijd met 0 begint
Gewijzigd op 19/12/2014 23:28:07 door Ivo P
Gewijzigd op 19/12/2014 23:36:44 door Brecht S
Zonder die nul werkt ie ook.
@SanThe: Ik heb geprobeerd maar als ik het eerste cijfer door een 1 vervang ipv een 0 werkt het wel niet meer. Dus weet niet goed wat je bedoeld?
Gewijzigd op 19/12/2014 23:39:00 door Brecht S
Probeer alle varianten gewoon even uit.
Dan zouden de / en . ook nog weg moeten en uiteraard de whitespaces. Als ik de code van SanThe gebruik kan ik denk ik niet direct / en . verwijderen. Heb ik daar geen str replace voor nodig?
Gewijzigd op 20/12/2014 00:06:09 door - SanThe -
http://www.pfz.nl/forum/topic/11021-herschrijven-van-gsm-nummers/
Misschien wel handig om het in het vervolg even te melden. Dan kunnen we dat topic ook even in de gaten houden en weten we ook wat daar aan adviezen worden gegeven.
Toevoeging op 20/12/2014 00:14:02:
@Aar: zal ik in het vervolg meedelen. Geen probleem. Ik wou gewoon alle opties en reacties openhouden en vanalles uitproberen wat mensen mij aanraden.
Het meest logische is dus om eerst de spaties en andere ongeldige tekens er uit te filteren om vervolgens de rechtse 9 cijfers te nemen en daar het voorloopdeel (internationaal) voor te plakken.
In dat geval gaat het ook goed bij nummers welke met 0032 beginnen.
Ik realiseer mij nu dat dit Belgische telefoonnummer zijn, ik weet niet of daar ook alle nummers 10-cijferig zijn.
Code (php)
1
2
3
4
2
3
4
<?php
$var = '0475-11.22.33';
echo '32'.preg_replace('/^0032|^0|^32|[^0-9]/', '', $var);
?>
$var = '0475-11.22.33';
echo '32'.preg_replace('/^0032|^0|^32|[^0-9]/', '', $var);
?>
Inderdaad zijn belgische gsmnummers ook steeds 10 cijfers en beginnen altijd met een nul als je de landcode er niet voorzet. Anderzijds vervalt de 0 als je de landcode wel voorzet bvb 0475 34 43 23 of 0032 475 11 22 33 ofwel 0032 475 11 22 33. Dit even ter verduidelijk voor pipo clown.
- alle niet cijfers eruit
- als met 0 begint, maar niet met 00: 0 eraf en er 32 voor zetten
- laten beginnen met +
Daarmee zou je ook andere dan belgische nummers kunnen verwerken.
Dit geldt trouwens voor alle telefonnummers, niet alleen gsm
- alle niet cijfers er uit inclusief whitespaces
- als het begint met 0 dan 32 van maken
- als het begint met 0032 dan 32 van maken
- als het begint met +32 dan de + weglaten
Het normale gsm nummer formaat in België is altijd zoals 0475 11 22 33
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$dbnumber = 'BE + 00 31 4 3456 123 9';
// Eerst gaan we alle ongeldige karakters er uit halen, we willeen alleen getallen.
$clean = preg_replace( '/[^0-9]/', '', $dbnumber );
// ($clean = '0031434561239') De BE en de plus zijn dus al verwijdert nu.
// We gaan de lengte van de string bepalen (13)
// Zou er slecht één nul staan dan wordt de lengte uiteraard 12, bij geen nul 11.
$lengte = strlen($clean);
// Het eerste karakter waar het eigenlijke nummer begint.
// Deze code is zo flexibel dat dit altijd de 4 zal zijn, het 4e, 3e of 2e karakter van links.
$start = $lengte - 9;
// We gaan de meest rechtse 9 cijfers bepalen (434561239)
$nettonr = substr($clean, $start, 9); // De 9 is de lengte van het nummer.
$resultaat = '32'.$nettonr; // (32434561239)
?>
$dbnumber = 'BE + 00 31 4 3456 123 9';
// Eerst gaan we alle ongeldige karakters er uit halen, we willeen alleen getallen.
$clean = preg_replace( '/[^0-9]/', '', $dbnumber );
// ($clean = '0031434561239') De BE en de plus zijn dus al verwijdert nu.
// We gaan de lengte van de string bepalen (13)
// Zou er slecht één nul staan dan wordt de lengte uiteraard 12, bij geen nul 11.
$lengte = strlen($clean);
// Het eerste karakter waar het eigenlijke nummer begint.
// Deze code is zo flexibel dat dit altijd de 4 zal zijn, het 4e, 3e of 2e karakter van links.
$start = $lengte - 9;
// We gaan de meest rechtse 9 cijfers bepalen (434561239)
$nettonr = substr($clean, $start, 9); // De 9 is de lengte van het nummer.
$resultaat = '32'.$nettonr; // (32434561239)
?>
Toevoeging op 20/12/2014 14:44:13:
Ivo P op 20/12/2014 09:32:01:
Daarmee zou je ook andere dan belgische nummers kunnen verwerken.
Dit geldt trouwens voor alle telefonnummers, niet alleen gsm
Dit geldt trouwens voor alle telefonnummers, niet alleen gsm
Door er 32 voor te zetten maak je juist van ieder nummer een Belgisch nummer, zelfs al zou het een Italiaans nummer zijn.
Gewijzigd op 20/12/2014 14:37:09 door Pipo Clown
Ga ik straks eens uittesten en je laten weten. Nu eventjes niet in de mogelijkheid daarvoor.
Wat als iemand een Nederlands nummer ingevoerd heeft?
Want bovenstaande code zet effectief gewoon 32 voor de laatste (hooguit) 9 cijfers van het ingevoerde nummer.
Ook als daar +49211570 stond,
of als er +31612345678 stond.
Enige controle op "staat er al een landnummer?" zou wel lief zijn naar je gebruikers toe.