Dirk: Suchen und Ersetzen am Ende eines Strings

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

  1. 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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. 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

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
  3. 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 ;)

  4. 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