2010-06-16 7 views
25

Comment puis-je utiliser PHP pour supprimer tous les caractères qui ne sont PAS alpha, numériques, d'espace ou de ponctuation?Regex: Strip non alphanumérique ou ponctuation

J'ai essayé ce qui suit, mais il supprime la ponctuation.

preg_replace("/[^a-zA-Z0-9\s]/", "", $str); 

Répondre

31
preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", $str); 

Exemple:

php > echo preg_replace("/[^a-zA-Z0-9\s\p{P}]/", "", "⟺f✆oo☃. ba⟗r!"); 
foo. bar! 

\p{P} matchs tous les caractères de ponctuation Unicode (voir Unicode character properties). Si vous souhaitez uniquement autoriser une ponctuation spécifique, ajoutez-les simplement à la classe de caractères annulée. Par exemple:

preg_replace("/[^a-zA-Z0-9\s.?!]/", "", $str); 
+0

pour ajouter:. ? ! correct – Tedd

+0

Le deuxième serait. Le premier permet toute ponctuation. –

+0

Ceux-ci semblent dépouiller tous les caractères :( – Tedd

3

Vous allez devoir énumérer explicitement la ponctuation comme il n'y a pas un raccourci pour que (par exemple \s est un raccourci pour les espaces blancs).

preg_replace('/[^a-zA-Z0-9\s\-=+\|[email protected]#$%^&*()`~\[\]{};:\'",<.>\/?]/', '', $str); 
0
$str = trim($str); 
$str = trim($str, "\x00..\x1F"); 
$str = str_replace(array("&quot;","&#039;","&amp;","&lt;","&gt;"),' ',$str); 
$str = preg_replace('/[^0-9a-zA-Z-]/', ' ', $str); 
$str = preg_replace('/\s\s+/', ' ', $str); 
$str = trim($str); 
$str = preg_replace('/[ ]/', '-', $str); 

Hope this helps.

Questions connexes