2012-07-04 3 views
50

Как удалить все не буквенно-цифровые символы из строки в PHP?Удалить все небуквенные символы, используя preg_replace

Это код, который я в настоящее время с помощью:

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

Это только заменяет пробелы.

+1

Возможный дубликат [Как удалить не буквенно-цифровые символы в строке? (включая ß, Ê и т. д.)] (http://stackoverflow.com/questions/7271607/how-do-i-remove-non-alphanumeric-characters-in-a-string-including-ss-e-etc) – mario

+0

@mario: Это немного отличается, поскольку речь идет о Unicode. Я уверен, что идеальный дубликат существует ... –

+0

Возможный дубликат [Удалить не-буквенно-цифровые символы] (http://stackoverflow.com/questions/659025/remove-non-alphanumeric-characters) – trejder

ответ

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

[Этот ответ поддерживает unicode ] (http://stackoverflow.com/a/17151182/99923) – Xeoncross

+10

В случае, если на первый взгляд кто-то на мгновение путал комментарий Xeoncross, его точка зрения заключалась в том, что ответ * не поддерживает символы Unicode. Но решение в ссылке Xeoncross * делает *. – orrd

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

Кажется, работает, на самом деле пример был в PHP документации на preg_replace

+1

Имейте в виду, что это будет * держать * подчеркивания, поскольку они считаются символами слов и также сохраняют пробелы –

+0

Я не знал о символах подчеркивания, но это не поддерживает пробелы. – lisovaccaro

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

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

В первом принять это, как я бы это сделать

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

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

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

Надеется, что это помогает!

+1

это не будет работать для нелатинских букв –

12

Не знаю, почему никто еще не предложил, но это, кажется, самый простой регулярное выражение:

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

Вы можете увидеть его в действии здесь, тоже: http://phpfiddle.org/lite/code/0sg-314

+1

Простейшим и эффективным в то же время является 'preg_replace ("/[\ W _] +/"," ", $ string)'. –

1

Вы можете использовать,

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

Вы можете использовать юникод символов,

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