Adresse splitten

TeamNoX

Grünschnabel
Hey Leute,
ich habe einen String der immer aus einem Straßennamen + Nummer + PLZ +Ort
Eine Hausnummer ist aber nicht immer wegebene

Der String sieht ungefähr so aus:
PHP:
Adolfstrasse 25 	13347 Berlin

Jedoch kann es auch so aussehen
PHP:
Alarichplatz 12105 Berlin

oder so
PHP:
Am Flutgraben 1 10997 Berlin

Mein Code sieht im moment so aus

PHP:
  foreach($adresse1 as $element){
            if(count($adresse1)==4){
                if(is_numeric($element)){
                    if($hausnrgesetzt == 0){
                        echo '4 NUMMER HNR';
                        echo $element;
                        $hausnummer = $element;
                        $hausnrgesetzt = 1;
                    }
                    else {
                        echo '4 NUMMER PLZ';
                        echo $element;
                        $plz = $element;
                    } 
                }
                else {
                    if($straszegesetzt4 == 0){
                        echo '4 STRAßE';
                        echo $element;
                        $strasze = $strasze.$element;
                        $straszegesetzt4 = 1;
                    }
                    else {
                        echo '4 Ort';
                        echo $element;
                        $ort = $element;
                        $straszegesetzt4 = 0;
                    }
                }
            }
            elseif(count($adresse1)==3){
                if(is_numeric($element)){
                    if($hausnrgesetzt == 0){
                        echo '3 PLZ';
                        echo $element;
                        $ort = $element;
                        $hausnrgesetzt = 1;
                    }
                } 
                else {
                    if($straszegesetzt4 == 0){
                        echo '3 STRAßE';
                        echo $element;
                        $strasze = $strasze.$element;
                        $straszegesetzt4 = 1;
                    }
                    else{
                        echo '3 ORT';
                        echo $element;
                        $ort = $element;
                        $straszegesetzt4 = 0;
                       
                    }
                }
            }
        }

Jeodoch logischer Weise Wenn es eine Strasse Am Ruhwinkel gibt hat 2 mal hintereinander einen String aber da ich hier

PHP:
  if($straszegesetzt4 == 0){
                        echo '4 STRAßE';
                        echo $element;
                        $strasze = $strasze.$element;
                        $straszegesetzt4 = 1;
                    }

straszegesetzt4 auf 1 setze geht er in den else zweig und schreibt es in den Ort anstatt zur Straße hinzufügen

if(count($adresse1)==4) ist nur um zu schauen wie viel elemente das array hat weil manchmal halt auch keine Nummer angegeben ist.

Liebe Grüße
 
Reguläre Ausrücke.....

Hier getestet
PHP:
<?PHP
  //
  // Text, der durchsucht werden soll
  //
  $subject = 'Am Flutgraben 1    10997 Berlin';
  //
  // Der Reguläre Ausdruck
  //
  $pattern = '/([[:alpha:] ]+)[ ]*([[:alnum:]]*)[ ]+([[:digit:]]{5})[ ]+([[:alnum:] -]+)$/is';
  //
  // RegExp auswerten
  //
  $result = preg_match($pattern, $subject, $subpattern);
  //
  // Ergebnis ausgeben
  //
  echo '<p>Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text '.
       (($result) ? '' : 'nicht ').'zu.</p>';
  //
  // Unterausdrücke ausgeben
  //
  echo '<pre>'.print_r($subpattern, TRUE).'</pre>';
?>
 
Ah ok aber das klappt dann nicht mit Alt-Tempelhof 1 oder so, weil dann macht er nur Tempelhof draus.

oder mit solchen straßen Aschaffenburgerstr. / Barbarossastr.
 
Dieses RegEx ist echt immer schwer für mich zu verstehen :)

Jetzt klappt nur noch "Bülowstr. / Dennewitzstr unter der S-Bahn" oder Bündnerring / Reginhardstr in der Art nicht.
 
Dann musst du die RegEx noch um Umlaute erweitern. Das sollte es dann gewesen sein.
 
Mhhh aber wie bekomm ich das hin. Eig funktioniert das doch so
PHP:
"/^[A-Za-z0-9äöüÄÖÜ]{1,10}$/"

aber ich hab ja etws mit alpha und so

PHP:
'/([[:alpha:] -\/\.,]+)[ ]*([[:alnum:]]*)[ ]+([[:digit:]]{5})[ ]+([[:alnum:] -]+)$/is'
weiß nicht wie ich das da einbauen kann weiß ich das mit alpha noch nicht kannte.
 
Gehts damit?

PHP:
'/([[:alpha:] -\/\.,äöüÄÖÜß]+)[ ]*([[:alnum:]]*)[ ]+([[:digit:]]{5})[ ]+([[:alnum:] -äöüÄÖÜß]+)$/is'

Damit auch München geht ;-)

Ansonsten könntest du es auch mal mit dem Unicode-Modifier (die hinter dem Pattern-Terminator angegeben Flags) probieren:

PHP:
'/([[:alpha:] -\/\.,]+)[ ]*([[:alnum:]]*)[ ]+([[:digit:]]{5})[ ]+([[:alnum:] -]+)$/isu'
 
das mit [:alpha:] und so
[:alpha:] entspricht a-zA-Z0-9. Dazu haben wir in unserem Fall bereits den Space, Slash, Punkt und Komma angehängt

Code:
/([[:alpha:] -\/\.,äöüÄÖÜàéè]+)[ ]*([[:alnum:]]*)[ ]+([[:digit:]]{5})[ ]+([[:alnum:] -]+)$/is
 
Ahhh ok:)

also jetzt findet er die Sonderzeichen aber komischerweise findet er jetzt so eine straße nicht

"Carl-Weder-Park 12347 Berlin" dafür findet er aber "Carl-Weder-Park 2 12347 Berlin"

sieht dann im array so aus

Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text nicht zu.

Array
(
)

Der verwendete Reguläre Ausdruck trifft auf den zu durchsuchenden Text zu.

Array
(
[0] => Carl-Weder-Park 2 12347 Berlin
[1] => Carl-Weder-Park
[2] => 2
[3] => 12347
[4] => Berlin
)

oder "Wolliner Str. 22 13355 Berlin"
 
Zurück