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: 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 ?