2012-07-04 16 views
50

Come posso rimuovere tutti i caratteri non alfanumerici da una stringa in PHP?Rimuovere tutti i caratteri non alfanumerici utilizzando preg_replace

Questo è il codice, che sono attualmente in uso:

$url = preg_replace('/\s+/', '', $string); 

Sostituisce solo spazi vuoti.

+1

possibile duplicato di [Come rimuovere caratteri non alfanumerici in una stringa? (inclusi ß, Ê, ecc.)] (http://stackoverflow.com/questions/7271607/how-do-i-remove-non-alphanumeric-characters-in-a-string-including-ss-e-etc) – mario

+0

@mario: Questo è un po 'diverso poiché si tratta di Unicode. Sono sicuro che esiste un duplicato perfetto che ... –

+0

possibile duplicato di [Rimuovi caratteri non alfanumerici] (http://stackoverflow.com/questions/659025/remove-non-alphanumeric-characters) – trejder

risposta

101
$url = preg_replace('/[^\da-z]/i', '', $string); 
+6

[Questa risposta supporta l'unicode ] (http://stackoverflow.com/a/17151182/99923) – Xeoncross

+10

Nel caso in cui qualcun altro fosse momentaneamente confuso dal commento di Xeoncross a prima vista, il suo punto era che la risposta * non supporta * i caratteri Unicode. Ma la soluzione nel collegamento Xeoncross * fa *. – orrd

4
preg_replace('/[\s\W]+/', '', $string) 

sembra funzionare, in realtà l'esempio era in documentazione di PHP su preg_replace

+1

Ricorda che questo * manterrà * caratteri di sottolineatura come sono considerati caratteri di parola e mantiene gli spazi pure. –

+0

Non sapevo di caratteri di sottolineatura, ma non mantiene gli spazi. – lisovaccaro

3
$alpha = '0-9a-z'; // what to KEEP 
$regex = sprintf('~[^%s]++~i', preg_quote($alpha, '~')); // case insensitive 

$string = preg_replace($regex, '', $string); 
13

In un primo momento prendere questo è come lo farei

$str = '[email protected]#[email protected]#$^@#$Hello%#$'; 

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

var_dump($outcome); 
//string(11) "qwertyHello" 

Spero che questo aiuta!

+1

questo non funzionerà con lettere non latine –

12
Non

sicuro perché nessun altro ha suggerito questo, ma questo sembra essere l'espressione regolare più semplice:

preg_replace("/\W|_/", "", $string) 

Si può vedere in azione anche qui: http://phpfiddle.org/lite/code/0sg-314

+1

Il più semplice ed efficiente allo stesso tempo è 'preg_replace ("/[\ W _] +/"," ", $ string)'. –

1

è possibile utilizzare,

$url = preg_replace('/[^\da-z]/i', '', $string); 

È possibile utilizzare per i caratteri unicode,

$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string); 
Problemi correlati