OVH Cloud OVH Cloud

remplacer des emails et liens par des *** ?

3 réponses
Avatar
Fred
Bonjour,

Comment faire avec des expressions régulière pour remplacer dans une chaine,
les emails & liens par autant de * par exemple ?

ex :
source : "hello, write to zozo@zozo.com and look http://toto.zozo.com !!"
au final : "hello, write to ************* and look ******************** !!"

merci pour toute aide !
cordialement,

zak

3 réponses

Avatar
Christophe PEREZ
Le Sat, 24 Jan 2004 18:24:22 +0000, Fred a écrit:

ex :
source : "hello, write to and look http://toto.zozo.com !!"
au final : "hello, write to ************* and look ******************** !!"


Bon, je sais que ça ne répond pas exactement à la question puisque le
nombre de "*" ne correspond pas à la chaine initiale mais :
preg_replace(
array("|[^ ]*@[^ ]*|","|http:[^ ]*|"),
array("***************","***************") , $chaine
);
fonctionne.

Si tu tiens vraiment à avoir le même nombre de caractères, rien qu'avec
une regexp, je ne sais pas faire (mais j'aimerais bien que quelqu'un nous
montre).

Par contre, en 2 commande, tu peux faire :
preg_match("|([^ ]*@[^ ]*).*(http:[^ ]*)|", $chaine, $result);
preg_replace(
array("|".$result[1]."|","|".$result[2]."|"),
array(str_repeat("*",strlen($result[1])),str_repeat("*",strlen($result[2]))),
$chaine
);

A condition dans les 2 cas que tes emails et url ne contiennent ni "|" ni " ".

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
P'tit Marcel
Christophe PEREZ écrivit
news::

Si tu tiens vraiment à avoir le même nombre de caractères, rien
qu'avec une regexp, je ne sais pas faire (mais j'aimerais bien que
quelqu'un nous montre).


moi, je ferai un truc du genre :

preg_replace_callback(
"`([-a-z0-9._]+@[-a-z0-9.]+)|(http:[^ ]+)`i",
create_function('$reg', 'return str_repeat("*", strlen($reg[0]));'
);

eça

Avatar
Christophe PEREZ
Le Sat, 24 Jan 2004 22:30:03 +0000, P'tit Marcel a écrit:

moi, je ferai un truc du genre :

preg_replace_callback(
"`([-a-z0-9._]+@[-a-z0-9.]+)|(http:[^ ]+)`i",
create_function('$reg', 'return str_repeat("*", strlen($reg[0]));'
);


Wahou !
Je ne connaissais pas cette fonction preg_replace_callback()
Merci de m'avoir appris quelque chose.

Corrigée pour qu'elle fonctionne :

echo preg_replace_callback(
"`([-a-z0-9._]+@[-a-z0-9.]+)|(http:[^ ]+)`i",
create_function('$reg', 'return str_repeat("*", strlen($reg[0]));'),
$chaine
);

;-)

--
Christophe PEREZ
Écrivez moi sans _faute !