Suchen und Ersetzen am Ende eines Strings
Dirk
- php
Hi liebes Forum,
habe da ein Problem, auf dessen Lösung ich nicht komme.
Ich möchte für eine Adressprüfung, die bisher auch wunderbar funktioniert, aus dem String der Straße folgendes herausfilternStra
straße|strasse|strase|Straße|Strasse|Strase|STRAßE|STRASSE|STRASE|Str.|STR.|str.|str|Str|STR
....und in jedem Fall mit "str." ersetzen.
Soweit so gut, funktioniert schon mit preg_replace:
$strasse = preg_replace('/straße|strasse|strase|Straße|Strasse|Strase|STRAßE|STRASSE|STRASE|Str.|STR.|str|Str|STR/', 'str.', $strasse);
...so erhalte ich z.B. bei "Beispielstraße" das Wort "Beispielstr.".
Jetzt hatte ich aber ein Fall, da hat jemand "Industriestr" eingegeben und die Weiterleitung der Adressprüfung an die Deutsche Post hat nur deshalb nicht funktioniert weil daraus "Industr.iestr." wurde.
Wer hätte da einen Lösungsansatz?
Dirk
hi,
Jetzt hatte ich aber ein Fall, da hat jemand "Industriestr" eingegeben und die Weiterleitung der Adressprüfung an die Deutsche Post hat nur deshalb nicht funktioniert weil daraus "Industr.iestr." wurde.
Wer hätte da einen Lösungsansatz?
Wenn du einen Suchtreffer nur am Ende der Zeichenkette finden möchtest, nutze das Metazeichen $ in deinem Suchausdruck.
(Kann sein, dass du dazu in deinem Falle die Oder-verknüpften Suchwörter noch einklammern musst.)
gruß,
wahsaga
Hallo Dirk.
Ich möchte für eine Adressprüfung, die bisher auch wunderbar funktioniert, aus dem String der Straße folgendes herausfilternStra
straße|strasse|strase|Straße|Strasse|Strase|STRAßE|STRASSE|STRASE|Str.|STR.|str.|str|Str|STR
....und in jedem Fall mit "str." ersetzen.
Und wozu möchtest du „str.“ durch „str.“ ersetzen?
Soweit so gut, funktioniert schon mit preg_replace:
Völlig unnötig. Du kennst str_replace? Und um dir Arbeit zu ersparen gibt es sogar das nicht-case-sensitive str_ireplace.
Jetzt hatte ich aber ein Fall, da hat jemand "Industriestr" eingegeben und die Weiterleitung der Adressprüfung an die Deutsche Post hat nur deshalb nicht funktioniert weil daraus "Industr.iestr." wurde.
Wer hätte da einen Lösungsansatz?
Du müsstest in deinem regulären Ausdruck festlegen, dass die zu suchende Zeichenkette rechts eine Wortgrenze (\b) haben muss.
Einen schönen Dienstag noch.
Gruß, Ashura
Hi,
$strasse = preg_replace('/straße|strasse|strase|Straße|Strasse|Strase|STRAßE|STRASSE|STRASE|Str.|STR.|str|Str|STR/', 'str.', $strasse);
Eins versteh ich nicht. Wenn du auf STRASSE prüfts, gehst du davon aus, das jemand nur Grossbuchstaben schreibt. Dein Ergebniss wäre dann z.B. BEISPIELstr.
Wieso verwendest du nicht stringtolower (oder war es strtolower?) und ucfirst? Dann sparst du dir die Hälfte der Suchstrings und bringst alles in eine saubere Form.
Das glöeiche Problem besteht, wenn die Strasse "Beispiel-Strasse" heisst, das würde dann Beispiel-str. ergeben, anstatt Beispiel-Str.
Insgesmmrt also nich ein wenig unausgereift dein Konzept ;)
gudn tach!
$strasse = preg_replace('/straße|strasse|strase|Straße|Strasse|Strase|STRAßE|STRASSE|STRASE|Str.|STR.|str|Str|STR/', 'str.', $strasse);
kuerzer waere es wohl damit:
/\bstr(a[ßs]*e|.)?\b/i
erklaerung zu den bestandteilen ist im php-manual. (es werden damit z.b. auch "strassssse" und "straßssßssßßse" gematcht, das sollte aber nicht stoeren, eher im gegenteil.)
beachte aber vor allem Manuels beitrag. diese ersetzung macht naemlich u.u. gar keinen sinn.
prost
seth