web-dev-qa-db-fra.com

Regex: Strip non alphanumeric ou ponctuation

Comment utiliser PHP pour supprimer tous les caractères qui ne sont PAS des caractères alpha, numériques, espace ou puncutation?

J'ai essayé ce qui suit, mais ça enlève la ponctuation.

preg_replace("/[^a-zA-Z0-9\s]/", "", $str);
25
Tedd
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} correspond à tous les caractères de ponctuation Unicode (voir Propriétés Unicode caractère ). Si vous souhaitez uniquement autoriser des ponctuations spécifiques, ajoutez-les simplement à la classe de caractères annulée. Par exemple:

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

Vous allez devoir lister explicitement la ponctuation car il n'y a pas de raccourci pour cela (par exemple, \s est un raccourci pour les caractères d'espacement).

preg_replace('/[^a-zA-Z0-9\s\-=+\|!@#$%^&*()`~\[\]{};:\'",<.>\/?]/', '', $str);
3
cletus
$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);

J'espère que cela t'aides.

0
MojganK