Seite 1 von 1
PHP preg_replace: telefonnummern und emails ersetzen?
Verfasst: 29.12.2008, 09:40
von nerd
hallo,
kann mir jemand auf die schnelle sagen wie man telefonnummern und emails in einem string mit * ersetzt? meine versuche hier haben ebenfalls jahreszahlen mit ersetzt

Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 29.12.2008, 09:59
von Hobby_SEO79
Erläuter das mal bitte näher!
Wann ersetzen? Bei der Eingabe? Beim Auslesen aus der Datenbank? Beim Speichern? Auch mal den Syntax posten wie die Nummern und Adressen eingetippt werden sollen und Kontrollalgos nennen die du schon zur Kontrolle einsetzt.
Verfasst: 29.12.2008, 13:04
von nerd
ersetzt werden soll innerhalb eines textes. das ist so eine art kommentar und manche user hinterlassen da email und/oder tel nummer - was da auch sinn macht. lediglich wenn bots (egal welcher art) vorbei kommen, moechte ich die emails und tel nummern ausblenden.
Verfasst: 29.12.2008, 13:28
von Synonym
Also bezüglich Email kannst Du so etwas in der Art nehmen.
Code: Alles auswählen
<?
$regexp = "/([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})/Uis";
$string = 'das ist ein Text @gmx.de mit einer email was-weis-denn-ich@web.de mitten drin';
$string_neu = preg_replace($regexp, '<b>[Email entfernt]</b>', $string);
echo $string.'<br />';
echo $string_neu.'<br />';
?>
Läuft so zumindest bei mir teilweise. Die "regexp" könnte aber eventuell verbessert werden.
Bezüglich Telefonnummern dürfte es schwer werden wenn Du da keine feste Formatvorgabe hast. Kannst an sich nur nach Zahlenketten suchen und die bekannten Jahreszahlen davon ausschließen. Natürlich aber auch die Schreibweisen mit / oder - oder auch Leerzeichen beachten. Ich für meinen Fall hab es aufgegeben, war mir zu ungenau.
Verfasst: 29.12.2008, 16:11
von Hobby_SEO79
bei telefonnummern könnte man über die zahlenlänge etwas regeln und sonderzeichen ()/- isolieren.
Mal hier mit der google-Suche anfangen:
https://www.google.de/search?num=100&hl ... uche&meta=
Verfasst: 29.12.2008, 21:39
von nerd
Synonym hat geschrieben:Also bezüglich Email kannst Du so etwas in der Art nehmen.
Code: Alles auswählen
<?
$regexp = "/([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})/Uis";
$string = 'das ist ein Text @gmx.de mit einer email was-weis-denn-ich@web.de mitten drin';
$string_neu = preg_replace($regexp, '<b>[Email entfernt]</b>', $string);
echo $string.'<br />';
echo $string_neu.'<br />';
?>
Läuft so zumindest bei mir teilweise. Die "regexp" könnte aber eventuell verbessert werden.
dankeschoen!
klugscheissernachtrag: mit
Code: Alles auswählen
$regexp = "/[A-Z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,4}$/Uis";
nimmt es auch die komplette tld mit - im o.g. beispiel blieb bei @hotmail.com immer "m" am ende stehen.

Verfasst: 29.12.2008, 22:20
von Synonym
Ah, ich sag doch die könnte besser sein
Allerdings hatte ich sie ein wenig geändert. Ohne den Modifikator "U" geht es auch mit der genannten com-Domain.
Code: Alles auswählen
$regexp = "/([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})/is";
alternativ auch die
Code: Alles auswählen
$regexp = "/([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4}?)/Uis";
und was mir auffällt, die tld kann ja seit einiger Zeit auch länger sein, also eher kein {2,4}, sondern eher ein {2,6} oder gibt es noch was längeres wie .travel ?