Seite 1 von 1

Frage zu regulären Ausdrücken

Verfasst: 29.07.2007 18:11
von LuLa
Hi,
ich möchte aus einem String den häufig vorkommenden Fehler beseitigen, daß die Leute zwischen Straße und Hausnummer kein Leerzeichen setzen. Aus "Teststr.12" soll "Teststr. 12" werden.

So in der Art:

Code: Alles auswählen

$adresse = ereg_replace('str.([0-9]{1,2,3})', 'str. \\1', $adresse);
Leider bekomme ich das nicht hin. Weiß jemand Rat?
Danke im voraus.


LuLa

Verfasst: 29.07.2007 18:31
von Underhill
Hi,

direkt helfen kann ich bei der Expression jetzt leider nicht.

Ich moechte nur sagen das das ganze etwas schwerer wird als du glaubst:

Was ist mit "Testtr.12a"? Oder wenn jemand "Teststraße12" eingibt? Diese Fälle sollten auch betrachtet werden...

Da ich davon ausgehe das das ganze nur Kosmetik ist würde ich es lieber manuell machen. Wenn du dir aber eine internationale Strassenstammdatenbank aufbauen willst ist es besser die Felder zu trennen...


Gruss
Underhill

PS: Ich habe im Kopf das internationale Strassen (England oder USA) zu Teil wirklich Nummern enthalten koennen. Habe aber gerade kein Beispiel zur Hand..

Verfasst: 29.07.2007 18:33
von LuLa
Underhill hat geschrieben:Oder wenn jemand "Teststr.12" eingibt?
Hatte ich doch geschrieben...

Verfasst: 29.07.2007 18:34
von Underhill
Hi,

war ein Tippfehler - Ist geändert...

Gruss
Underhill

Verfasst: 29.07.2007 18:46
von LuLa
Ich glaub ich hab's:

Code: Alles auswählen

$adresse = ereg_replace('str.([0-9]{1,3})', 'str. \\1', $adresse);

Verfasst: 29.07.2007 19:13
von StarWolf3000
ich würde sowieso PCRE Ausdrücke bevorzugen:

Code: Alles auswählen

// Für str.
$adresse = preg_replace("/str\.([0-9]{1,3})([A-H]{0,1})/i", "str. $1$2", $adresse);

// Für strasse/straße
$adresse = preg_replace("/strasse([0-9]{1,3})([A-H]{0,1})/i", "strasse $1$2", $adresse);
$adresse = preg_replace("/straße([0-9]{1,3})([A-H]{0,1})/i", "straße $1$2", $adresse);
Man beachte: der . muss maskiert werden mit \

Ich habs auch gleich so abgeändert, dass mindestens 1 Ziffer aber höchstens 3 Ziffern nach dem Punkt folgen und danach optional max. 1 Buchstabe von A-H (Groß-, Kleinschreibung wird nicht beachtet durch das i nach dem / )

Verfasst: 29.07.2007 19:23
von Underhill
Hi,

oder so:

Code: Alles auswählen

$adresse = preg_replace("/([a-z\.])([0-9])/", "\\1 \\2", $adresse);
Hausnummer koennen mehr als drei Stellen haben ;-)

Gruss
Underhill

Verfasst: 29.07.2007 19:26
von StarWolf3000
Underhill hat geschrieben:Hi,

oder so:

Code: Alles auswählen

$adresse = preg_replace("/([a-z\.])([0-9])/", "\\1 \\2", $adresse);
Hausnummer koennen mehr als drei Stellen haben ;-)

Gruss
Underhill
Echt? Nun ja, aber hierzulande hab ich noch keine Hausnummer gesehen, die mehr als 3 Ziffern in der Nummer hat

Verfasst: 29.07.2007 19:36
von Underhill
Hi,
StarWolf3000 hat geschrieben:Echt? Nun ja, aber hierzulande hab ich noch keine Hausnummer gesehen, die mehr als 3 Ziffern in der Nummer hat
was glaubst wo z.B. 4711 herkommt? :wink:

PS: "Test Strasse2-8" klappt mit meiner auch..


Gruss
Underhill

Verfasst: 29.07.2007 20:32
von Pyramide
Warum nehmt ihr nicht einfach zwei Felder? Eins für die Strasse und eins für die Hausnummer...