2010-06-16 11 views
25

Come posso utilizzare PHP per rimuovere tutti i caratteri che non sono alfa, numerici, di spazio o di punteggiatura?Regex: strip non alfa numerico o punteggiatura

Ho provato quanto segue, ma elimina la punteggiatura.

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

risposta

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

Esempio:

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

\p{P} partite tutti i caratteri di punteggiatura Unicode (vedi Unicode character properties). Se si desidera consentire solo punteggiatura specifica, è sufficiente aggiungerli alla classe di caratteri negata. Per esempio:

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

in modo da aggiungere:. ? ! corregge – Tedd

+0

Il secondo lo farebbe. Il primo consente tutta la punteggiatura. –

+0

Questi sembrano spogliare TUTTI i caratteri :( – Tedd

3

si sta andando ad avere per elencare la punteggiatura in modo esplicito come non v'è alcuna scorciatoia per che (ad es \s è l'abbreviazione di caratteri di spazio vuoto).

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); 

Spero che questo aiuti.