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
Š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
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
Ř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
ShiraNai7:
Paráda, funguje pěkně, děkuju
petr 6
Profil
Funguje i na adresu náměstí 28. října 6a?
Str4wberry
Profil
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
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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0