Fehlende Leerezichen nach Komma oder Punkt im String

Hallo,

der Inhalt eines bestimmten Datenbankfeldes zerschießt mir regelmäig =
das
Seitendesign, weil einige User, die die Inhalte eingeben, keine
Leerezichen hinter einem Punkt oder einem Komma setzen.

Dadurch entstehen zu lange Zeichenketten, die im Browser nicht
umgebrochen werden und die Anzeige in die Breite ziehen.

Ich suche jetzt nach einer Möglichkeit, vor der Anzeige die fehlenden
Leerezichen einzufügen. Mit str_replace z. B. bin ich nicht weiter
gekommen, weil ich ja vorher nicht weiß, welche Zeichen vor und nach
einem Komma stehen.

Ich müsste also den String darauf prüfen, ob ein Buchstabe oder eine =

Zahl direkt ohne Leerzeichen auf ein Komma oder einen Punkt folgt.

Wie mache ich das?

Besten Dank von Klaus
kpl [ So, 21 Oktober 2007 11:40 ] [ ID #1850721 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Klaus P. Lewohn schrieb:
> Hallo,
>
> der Inhalt eines bestimmten Datenbankfeldes zerschießt mir regelmäig das
> Seitendesign, weil einige User, die die Inhalte eingeben, keine
> Leerezichen hinter einem Punkt oder einem Komma setzen.
>
> Dadurch entstehen zu lange Zeichenketten, die im Browser nicht
> umgebrochen werden und die Anzeige in die Breite ziehen.
>
> Ich suche jetzt nach einer Möglichkeit, vor der Anzeige die fehlenden
> Leerezichen einzufügen. Mit str_replace z. B. bin ich nicht weiter
> gekommen, weil ich ja vorher nicht weiß, welche Zeichen vor und nach
> einem Komma stehen.
>
> Ich müsste also den String darauf prüfen, ob ein Buchstabe oder eine
> Zahl direkt ohne Leerzeichen auf ein Komma oder einen Punkt folgt.

preg_replace('~(?<=\w)([.,])(?=\w)~', '$1 ', $text)

- aber das ist nicht wirklich ausgereift. Und mit Zahlen musst du
aufpassen, damit nicht sowas wie 12,30 auch 'getrennt' wird.

Wenn du noch nichts mit regulären Ausdrücken zu tun hattest, lies
http://www.danielfett.de/df_artikel_regex.html und hol dir den dort
verlinkten Regex-Coach, bevor du obigen Ausdruck verfeinerst.

Daniel
Daniel Fett [ So, 21 Oktober 2007 12:02 ] [ ID #1850724 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Klaus P. Lewohn schrieb:
> Hallo,
>
> der Inhalt eines bestimmten Datenbankfeldes zerschießt mir regelmäig das
> Seitendesign, weil einige User, die die Inhalte eingeben, keine
> Leerezichen hinter einem Punkt oder einem Komma setzen.
>
> Dadurch entstehen zu lange Zeichenketten, die im Browser nicht
> umgebrochen werden und die Anzeige in die Breite ziehen.
>
> Ich suche jetzt nach einer Möglichkeit, vor der Anzeige die fehlenden
> Leerezichen einzufügen. Mit str_replace z. B. bin ich nicht weiter
> gekommen, weil ich ja vorher nicht weiß, welche Zeichen vor und nach
> einem Komma stehen.
>
> Ich müsste also den String darauf prüfen, ob ein Buchstabe oder eine
> Zahl direkt ohne Leerzeichen auf ein Komma oder einen Punkt folgt.
>
> Wie mache ich das?

echo preg_replace('/([.,])(?!\s)/', '\1 ', "Test,a, b.rest. test.");

Stefan
Weinzierl Stefan [ So, 21 Oktober 2007 12:33 ] [ ID #1850729 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Klaus P. Lewohn schrieb:

> der Inhalt eines bestimmten Datenbankfeldes zerschießt mir regelmäig das
> Seitendesign, weil einige User, die die Inhalte eingeben, keine
> Leerezichen hinter einem Punkt oder einem Komma setzen.
^^^^^^^^^^^

Leerzeichen.

Ich prüfe solche Texte schon bei der Eingabe auf zu lange Wörter und
haue sie mit einem entsprechenden Hinweis dem User zwecks Korrektur um
die Ohren. Damit stellt sich dieses Problem erst gar nicht. Aber dieser
Tipp kommt für Dich wohl zu spät.

> Ich suche jetzt nach einer Möglichkeit, vor der Anzeige die fehlenden
> Leerezichen einzufügen.
^^^^^^^^^^^

1x falsch hätte ich als Tippfehler durchgehen lassen, aber nicht 3x :-)

> Ich müsste also den String darauf prüfen, ob ein Buchstabe oder eine
> Zahl direkt ohne Leerzeichen auf ein Komma oder einen Punkt folgt.
>
> Wie mache ich das?

Mit Hilfe der zahlreichen ereg_ und preg_-Funktionen.

Gruß. Claus
Claus Reibenstein [ So, 21 Oktober 2007 14:03 ] [ ID #1850731 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Weinzierl Stefan wrote:
> echo preg_replace('/([.,])(?!\s)/', '\1 ', "Test,a, b.rest. test.");

echo preg_replace('/([.,])(?![\s\d])/', '\1 ', "Test,a, b.rest. test.
13.37 oder 13,37");

auf diese Weise werden Zahlen nicht zerschossen.

Michael
Michael Ziegler [ So, 21 Oktober 2007 14:16 ] [ ID #1850734 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Claus Reibenstein wrote:

> Mit Hilfe der zahlreichen ereg_ und preg_-Funktionen.

Nein nur mit Hilfe der preg_* Funktionen. Vgl. dazu:

8.2. Soll ich ereg() oder preg() verwenden?
http://www.php-faq.de/q/q-regexp-ereg.html

Wobei der Artikel noch nichtmal sagt das ereg_* bei der nächsten vollen
PHP-Version sowieso wegfällt.

Aber das alles wurde hier eigentlich bereits X mal durchgekaut.

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Ulf Kadner [ So, 21 Oktober 2007 15:46 ] [ ID #1850740 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Ulf Kadner schrieb:

> Claus Reibenstein wrote:
>
>> Mit Hilfe der zahlreichen ereg_ und preg_-Funktionen.
>
> Nein nur mit Hilfe der preg_* Funktionen. Vgl. dazu:
>
> 8.2. Soll ich ereg() oder preg() verwenden?
> http://www.php-faq.de/q/q-regexp-ereg.html

Danke für die Info. Ich muss zugeben, dass ich mich mit regulären
Ausdrücken im PHP-Umfeld noch nicht allzu intensiv befasst habe. Bis
jetzt bin ich meist ohne ausgekommen.

> Wobei der Artikel noch nichtmal sagt das ereg_* bei der nächsten vollen
> PHP-Version sowieso wegfällt.

Immerhin sagt er, dass diese Funktionen alt sind und nicht mehr
verwendet werden sollten außer auf "Rücksicht auf veraltete
Installationen". Ich denke mal, das ist deutlich genug.

Gruß. Claus
Claus Reibenstein [ So, 21 Oktober 2007 16:07 ] [ ID #1850742 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Klaus P. Lewohn schrieb:
> Hallo,
>
> der Inhalt eines bestimmten Datenbankfeldes zerschießt mir regelmäig das
> Seitendesign, weil einige User, die die Inhalte eingeben, keine
> Leerezichen hinter einem Punkt oder einem Komma setzen.

An einem Benutzer ein Exempel statuieren und als Krähenfutter draussen
verotten lassen.

Meiner Ansicht nach ist es nicht vernünftig, hier in den Inhalt
einzugreifen. Es gibt zum einen X vernünftige Beispiele, warum ich einen
Punkt zwischen zwei Worte ohne Leerzeichen machen kann (alleine, wenn
ich über Java schreibe...), zum anderen wird das Verhalten des Programms
schwerer durchschaubar.
--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html
Hadanite Marasek [ So, 21 Oktober 2007 20:11 ] [ ID #1850754 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Klaus P. Lewohn schrieb:

> Ich suche jetzt nach einer Möglichkeit, vor der Anzeige die fehlenden=

> Leerezichen einzufügen. Mit str_replace z. B. bin ich nicht weiter
> gekommen, weil ich ja vorher nicht weiß, welche Zeichen vor und nach =

> einem Komma stehen.
>
> Ich müsste also den String darauf prüfen, ob ein Buchstabe oder ein=
e
> Zahl direkt ohne Leerzeichen auf ein Komma oder einen Punkt folgt.
>
> Wie mache ich das?

Am besten gar nicht.
$txt =3D wordwrap( $txt, $maxlen, true );
zerstört den Text auch nicht mehr und funktioniert ganz gut.

Vorteil: Das Ergebnis gefällt dem Eingebenden vielleicht nicht, sodass
er künftig eine korrekte Interpunktion verwendet.

MfG
Niels

--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Niels Braczek [ So, 21 Oktober 2007 20:30 ] [ ID #1850756 ]

Re: Fehlende Leerezichen nach Komma oder Punkt im String

Claus Reibenstein wrote:

> Danke für die Info.

Gern.

> Ich muss zugeben, dass ich mich mit regulären
> Ausdrücken im PHP-Umfeld noch nicht allzu intensiv befasst habe. Bis
> jetzt bin ich meist ohne ausgekommen.

Das kann ich mir wiederum garnicht vorstellen ;-) Ohne regex. Wie baut
man da z.B. ne vernünftige Templateengine?

>> Wobei der Artikel noch nichtmal sagt das ereg_* bei der nächsten vollen
>> PHP-Version sowieso wegfällt.
>
> Immerhin sagt er, dass diese Funktionen alt sind und nicht mehr
> verwendet werden sollten außer auf "Rücksicht auf veraltete
> Installationen". Ich denke mal, das ist deutlich genug.

Klar.

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Ulf Kadner [ So, 21 Oktober 2007 22:25 ] [ ID #1850760 ]
PHP » de.comp.lang.php.misc » Fehlende Leerezichen nach Komma oder Punkt im String

Vorheriges Thema: Einbruchsversuch?
Nächstes Thema: Versionen von Scripten verwalten