10 votes

UTF 8 String supprimer tous les caractères invisibles sauf la nouvelle ligne

J'utilise la regex suivante pour supprimer tous les caractères invisibles d'une chaîne UTF-8 :

$string = preg_replace('/\p{C}+/u', '', $string);

Cela fonctionne bien, mais comment puis-je le modifier pour qu'il supprime tous les caractères invisibles SAUF les nouvelles lignes ? J'ai essayé des trucs en utilisant [^ \n ] etc. mais cela ne fonctionne pas.

Merci de nous aider !

Edit : le caractère de nouvelle ligne est ' \n '

12voto

Tim Pietzcker Points 146308

Utilisez une "double négation" :

$string = preg_replace('/[^\P{C}\n]+/u', '', $string);

Explication :

  • \P{C} est la même chose que [^\p{C}] .
  • Par conséquent, [^\P{C}] est la même chose que \p{C} .
  • Puisque nous avons maintenant une classe de caractères négatifs, nous pouvons soustraire d'autres caractères tels que \n d'elle.

2voto

Richard Points 54016

Mon utilisation d'une assertion négative vous pouvez une classe de caractères sauf ce que l'assertion correspond, donc :

$res = preg_replace('/(?!\n)\p{C}/', '', $input);

(Le dialecte PHP des expressions régulières ne supporte pas la soustraction de classes de caractères, ce qui serait, autrement, une autre approche : [\p{C}-[\n]] .)

0voto

Charles Points 3434

Avant de le faire, remplacez les retours à la ligne (je suppose que vous utilisez quelque chose comme \n ) avec une chaîne aléatoire comme ++++++++ (toute chaîne qui ne sera pas supprimée par votre expression régulière et qui ne se trouve pas naturellement dans votre chaîne en premier lieu), puis exécutez votre preg_replace, puis remplacez ++++++++ con \n encore.

$string=str_replace('\n','++++++++',$string); //Replace \n
$string=preg_replace('/\p{C}+/u', '', $string); //Use your regexp
$string=str_replace('++++++++','\n',$string); //Insert \n again

Ça devrait aller. Si vous utilisez <br/> au lieu de \n utilisez simplement nl2br pour préserver les sauts de ligne et remplacer <br/> au lieu de \n

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X