Autor | Zpráva | ||
---|---|---|---|
Majkelju Profil |
Řeším problém rozkouskování adresy... Dejme tomu, že mám proměnnou
$adresa = "Náměstí Míru 21" a chci z ní dostat ulici a číslo popisné. Pokud použiju explode úplně na obyčejný způsob, tak mi to rozdělí na tři části, což nechci. Jak udělat, abych vždy dostal víceslovný název ulice do jedné proměnné a číslo popisné do jiné proměnné?
|
||
Str4wberry Profil |
#2 · Zasláno: 17. 5. 2013, 12:07:17
Šlo by použít regulární výraz (jako číslo ulice považovat číslo na konci řetězce). Nebo si jednoduše jako číslo ulice vzít poslední část a ostatní části si opět spojit do proměnné.
Mimochodem, k čemu je uvedená procedura dobrá? |
||
Majkelju Profil |
#3 · Zasláno: 17. 5. 2013, 12:09:52
Str4wberry:
Tím druhým způsobem bych to asi zvládl :) Dobré je to k tomu, že tu celou adresu načítám z xml dokumentu a importuju do databáze, kde jsou v tabulce sloupce ulice a čp...Dalo by se to jistě vyřešit zjednodušením databáze, ale dělám nově na větším projektu v jedné firmě a nemůžu skoro do ničeho sáhnout, proto se musím přizpůsobit podmínkám. |
||
ShiraNai7 Profil |
#4 · Zasláno: 17. 5. 2013, 12:12:03
Řegulární výrazy, například takto:
$adresa = "Náměstí Míru 21"; if (0 !== preg_match('~^\s*(.*)\s+([0-9/\\-.]+)\s*$~', $adresa, $match)) { echo 'Ulice: ', $match[1], "\n"; echo 'Číslo: ', $match[2]; } else { echo 'Nesprávný formát'; } Výsledek: Ulice: Náměstí Míru Číslo: 21 |
||
Majkelju Profil |
#5 · Zasláno: 17. 5. 2013, 12:17:49
ShiraNai7:
Paráda, funguje pěkně, děkuju |
||
petr 6 Profil |
#6 · Zasláno: 17. 5. 2013, 12:41:35
Funguje i na adresu náměstí 28. října 6a?
|
||
Str4wberry Profil |
#7 · Zasláno: 17. 5. 2013, 12:52:22
Nezdá se, ulice s čísly v názvu by neměly být problém, ale s písmenem za posledním číslem už ten regulární výraz nepočítá.
|
||
peta Profil |
Tez bych otestoval "Na rybníčku 626/1".
|
||
1Pupik1989 Profil |
Zkusil bych:
$address = "Náměstí Míru 21"; //$address = "28. října 6a"; //$address = "Na rybníčku 626/1"; if(preg_match('~^\s*(.+)\s+([0-9a-z/]+)$~',$address,$match)){ echo 'Ulice: ' . $match[1] . "<br>"; echo 'Čp.: ' . $match[2]; }else{ echo "Neplatná adresa"; } |
||
Str4wberry Profil |
#10 · Zasláno: 17. 5. 2013, 14:37:34
Reakce na 1Pupika1989:
Tomu ale zase vyhoví i adresa bez čísla. Třeba pro ulici „Zelený pruh“ bez čísla popisného se udělá č. p. z pruhu. :–) Jinak ještě tu nezaznělo, že pokud by na té adrese hodně záleželo, tak je asi nejlepší řešení ji ověřovat přes Google Maps API nebo podobnou službu. |
||
1Pupik1989 Profil |
#11 · Zasláno: 17. 5. 2013, 16:16:57
No jo, kopírovací chyba.
Oprava: $address = "Náměstí Míru 21"; //$address = "28. října 6a"; //$address = "Na rybníčku 626/1"; if(preg_match('~^\s*(.+)\s+([0-9]+[a-z/]*)$~',$address,$match)){ echo 'Ulice: ' . $match[1] . "<br>"; echo 'Čp.: ' . $match[2]; }else{ echo "Neplatná adresa"; } |
||
Tori Profil |
1Pupik1989:
Malé vylepšení: (pro mezery mezi číslem a písmenem vchodu, velká písmena v písmenu vchodu a číslo domu s lomítkem) ~^\s*(.+)\s+([0-9]+[0-9a-z/ ]*)$~i |
||
Časová prodleva: 11 let
|
0