| 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: 13 let
|
|||
0