[PHP] Adres => straatnaam, huisnummer, toevoeging

Pagina: 1
Acties:
  • 2.084 views sinds 30-01-2008

Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
Deze vraag is al diverse keren naar voren gekomen op dit forum, maar helaas is er nog geen echte oplossing voor het probleem waar meerdere mensen tegenaan lopen.

Ik wil een adres omzetten in een straatnaam, huisnummer en een evt. huisnummertoevoeging.

Ik heb al een stuk code die de straatnaam en de toevoeging apart zetten, maar hoe krijg ik nu het huisnummer?

code:
1
2
3
4
5
6
7
8
9
10
11
<?

$adres = "Lange weide 12 boven";
list($straat,$nummer,$toev) = split(" [0-9]+",$adres);

echo $straat;
echo "<br>";
echo $nummer;
echo "<br>";
echo $toev;
?>

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 05-05 15:03

gorgi_19

Kruimeltjes zijn weer op :9

Hoe ga je trouwens iets doen als:

1e Helmerstraat ?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
gorgi_19 schreef op 03 december 2003 @ 19:01:
Hoe ga je trouwens iets doen als:

1e Helmerstraat ?
Dat is geen enkel probleem aangezien het zoekt naar een spatie gevolgd door een getal. Dat probleem was al voorzien en ingebouwd.

Acties:
  • 0 Henk 'm!

Anoniem: 26306

Geen split gebruiken, maar bijvoorbeeld preg_split, of preg_match:

$chunks = preg_split ( '/(\s+\n+)/', $adres, -1, PREG_SPLIT_DELIM_CAPTURE );

Persoonlijk zou ik preg_match gebruiken met een uitgebreidere regular expression.

[ Voor 5% gewijzigd door Anoniem: 26306 op 03-12-2003 19:22 ]


Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
Ik ben er bijna. Het enige dat ik nu nog moet toevoegen, maar waar ik dus niet uit kom is het zoeken van een karakter alles behalve een cijfer. Het moet wel gevolgt kunnen worden door bijv. een cijfer of andere karakters.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?

$adres = "1e Helmerstraat 12 2hoog";
list($straat) = split(" [0-9]+",$adres);
list($leeg,$rest) = split("$straat",$adres);
list($nummer) = split("[_a-zA-Z-]+",$rest);
list($leeg,$toev) = split("$nummer",$rest);

echo "adres = $adres<br>";
echo "straat = $straat<br>";
echo "rest = $rest<br>";
echo "nummer = $nummer<br>";
echo "toev = $toev<br>";
?>


Geeft het volgende:

adres = 1e Helmerstraat 12 2hoog
straat = 1e Helmerstraat
rest = 12 2hoog
nummer = 12 2
toev = hoog

Zoals je ziet moet de volgende regel aangepast worden:

code:
1
list($nummer) = split("[_a-zA-Z-]+",$rest);


Het gaat bijv. wel goed bij:
1e Helmerstraat 12-2hoog
maar niet bij:
1e Helmerstraat 12 2hoog
(spatie i.p.v. streepje).

Dit uiteraard doordat de spatie niet gezocht wordt in de te veranderen code-regel, maar ik kom er niet uit hoe ik bijv. de spatie toe moet voegen in de code-regel.

Acties:
  • 0 Henk 'm!

  • JeroenE
  • Registratie: Januari 2001
  • Niet online
Dat is geen enkel probleem aangezien het zoekt naar een spatie gevolgd door een getal. Dat probleem was al voorzien en ingebouwd.
Plein 1944 2
6511 JB Nijmegen

hint: 2 is het nummer en geen toevoeging, en ja, het is een bestaand adres (al heb ik het nummer gewoon even 'verzonnen'). Wellicht bestaan er ook nog adressen in die straat met toevoegingen; ik woon er niet dus heb geen idee of dat zo is of niet.

Edit: Waarom wil je het trouwens splitsen? wil jezelf KIX codes gaan printen ofzoiets?
Als het een handjevol adressen zijn kan je waarschijnlijk beter een 'standaard' omzetting verzinnen en handmatig e.e.a. aanpassen.
Als je ook buitenlandse adressen hebt dan gaat het al helemaal niet. In de USA bijvoorbeeld zet men eerst het nummer en dan pas de straat neer. En heb je wel eens een Engels adres gezien? Die zijn allemaal anders afhankelijk van de grootte van het plaatsje. Adressen als "Joe Smith; The green cottage; Nowhere; UK" enzo.

[ Voor 40% gewijzigd door JeroenE op 03-12-2003 21:19 ]


Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
jeroene schreef op 03 december 2003 @ 21:10:
[...]

Plein 1944 2
6511 JB Nijmegen

hint: 2 is het nummer en geen toevoeging, en ja, het is een bestaand adres (al heb ik het nummer gewoon even 'verzonnen'). Wellicht bestaan er ook nog adressen in die straat met toevoegingen; ik woon er niet dus heb geen idee of dat zo is of niet.
Ik heb ook niet de illusie dat alle adressen op deze manier goed zullen gaan, maar het verminderd de handmatige invoer en controle.

Graag zie ik oplossing van m'n probleem en geen extra adressen die er wel/niet goed doorheen zullen komen. B)

Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
Het enige dat ik nog nodig heb is de Regular Expression voor alle tekens (incl. spatie) behalve(!) cijfers.

Dat zal toch wel iemand op dit forum weten?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:48

crisp

Devver

Pixelated

Anoniem: 98832 schreef op 04 december 2003 @ 09:46:
Het enige dat ik nog nodig heb is de Regular Expression voor alle tekens (incl. spatie) behalve(!) cijfers.

Dat zal toch wel iemand op dit forum weten?
alle tekens behalve cijfers:
code:
1
[^\d]

alstu :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
crisp schreef op 04 december 2003 @ 09:55:
[...]

alle tekens behalve cijfers:
code:
1
[^\d]

alstu :)
Dit werkt helaas niet, want doe ik fout?

code:
1
list($nummer) = split("[^\d]+",$rest);

Acties:
  • 0 Henk 'm!

Anoniem: 26306

\d is afkomstig uit de Perl-compatible regular expressions, in POSIX extended regexen is dat [:digit:]

Maar zelfs de PHP manual raadt je aan om de Perl-compatible syntax te gebruiken, die zijn vaak sneller, en je kunt er veel meer mee.

Overigens is "alles behalve cijfers" ook gewoon \D, dus exact het tegenovergestelde van \d

En je wilt hier echt preg_match gebruiken, en niet preg_split.

Acties:
  • 0 Henk 'm!

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 15-09-2024

jvaneijk

Dr.Oak

gorgi_19 schreef op 03 december 2003 @ 19:01:
Hoe ga je trouwens iets doen als:

1e Helmerstraat ?
offtopic:
Heej nog meer amsterdammers :Y)

iRacing Profiel


Acties:
  • 0 Henk 'm!

Anoniem: 98832

Topicstarter
jeroene schreef op 03 december 2003 @ 21:10:
[...]

Plein 1944 2
6511 JB Nijmegen

hint: 2 is het nummer en geen toevoeging, en ja, het is een bestaand adres (al heb ik het nummer gewoon even 'verzonnen'). Wellicht bestaan er ook nog adressen in die straat met toevoegingen; ik woon er niet dus heb geen idee of dat zo is of niet.

Edit: Waarom wil je het trouwens splitsen? wil jezelf KIX codes gaan printen ofzoiets?
Als het een handjevol adressen zijn kan je waarschijnlijk beter een 'standaard' omzetting verzinnen en handmatig e.e.a. aanpassen.
Als je ook buitenlandse adressen hebt dan gaat het al helemaal niet. In de USA bijvoorbeeld zet men eerst het nummer en dan pas de straat neer. En heb je wel eens een Engels adres gezien? Die zijn allemaal anders afhankelijk van de grootte van het plaatsje. Adressen als "Joe Smith; The green cottage; Nowhere; UK" enzo.
Wat me erg tegenvalt van dit forum is dat iedereen maar vragen gaat stellen i.p.v. helpt bij het oplossen van je probleem. Natuurlijk heb ik een reden om het stukje code te schrijven en dat is uiteraard niet om 5 adressen om te zetten. Tevens vind ik verwijzingen naar php.net zinloos aangezien je er vanuit moet gaan dat als de poster er daar uit zou komen niet zijn probleem hier zou plaatsen. Ik ga er vanuit dat als je het niet red je de hulp van anderen vraagt. Dan is het zinloos om de poster te verwijzen naar iets waar hij/zij niet uit komt.

Als er nog suggesties zijn dan zijn die welkom. Vragen zijn niet relevant, eerder irritant!

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 05-05 20:47

Creepy

Tactical Espionage Splatterer

Anoniem: 98832 schreef op 04 december 2003 @ 13:39:
[...]


Wat me erg tegenvalt van dit forum is dat iedereen maar vragen gaat stellen i.p.v. helpt bij het oplossen van je probleem. Natuurlijk heb ik een reden om het stukje code te schrijven en dat is uiteraard niet om 5 adressen om te zetten. Tevens vind ik verwijzingen naar php.net zinloos aangezien je er vanuit moet gaan dat als de poster er daar uit zou komen niet zijn probleem hier zou plaatsen. Ik ga er vanuit dat als je het niet red je de hulp van anderen vraagt. Dan is het zinloos om de poster te verwijzen naar iets waar hij/zij niet uit komt.
Helaas gebeurt het te vaak dat er topics worden gestart waarin de topicstarter zelf zo weinige mogelijk heeft gedaan en uitgezocht en z'n probleem hier maar dumpt om een kant en klare oplossing te krijgen. Vandaar dat je verwijzingen krijgt naar php.net e.d.
Als er nog suggesties zijn dan zijn die welkom. Vragen zijn niet relevant, eerder irritant!
Ze zijn zeker wel relevant want je hebt een niet oplosbaar probleem. Je zal namelijk altijd fouten houden in het lostrekken van dit soort informatie in verschillende velden, en dat zal je altijd handmatig moeten controleren.

offtopic:
ACM: slome! :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

't Zijn vragen om je te wijzen waar je over na moet denken.

Zolang er geen vast patroon is aan te geven hoe een adres gedefinieerd is, blijft je script altijd fouten genereren.
Als je de postcode hebt wordt het overigens een stuk makkelijker, dan kan je een match van de "bij de postcode horende straat" doen (nadeel zijn dan afkortingen, spaties, etc), of gewoon alleen het nummer (+toevoeging) opzoeken omdat je de straatnaam uit de postcode kan halen.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 05-05 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dus eigenlijk wil jij alleen maar een kant en klare oplossing?

Sorry, daar doen we hier niet aan. De mensen proberen je te helpen (en je zoveel mogelijk zelf op te laten lossen). Blijkbaar sta je daar niet voor open, en dan kan ik de topic net zo goed op slot doen. Veel succes nog

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.