Удалите все не буквенно-цифровые символы с помощью preg replace


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

Это код, который я сейчас использую:

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

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

Author: trejder, 2012-07-04

6 answers

$url = preg_replace('/[^\da-z]/i', '', $string);
 106
Author: John Conde, 2017-05-05 12:25:17

Сначала подумайте, как бы я это сделал

$str = 'qwerty!@#$@#$^@#$Hello%#$';

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

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

Надеюсь, это поможет!

 15
Author: sevenadrian, 2012-07-04 01:27:54

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

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

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

 13
Author: Chuck Le Butt, 2013-07-30 13:05:39
preg_replace('/[\s\W]+/', '', $string)

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

 4
Author: lisovaccaro, 2012-07-04 00:42:57
$alpha = '0-9a-z'; // what to KEEP
$regex = sprintf('~[^%s]++~i', preg_quote($alpha, '~')); // case insensitive

$string = preg_replace($regex, '', $string);
 3
Author: Alix Axel, 2012-07-04 00:55:58

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

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

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

$url = preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
 2
Author: Damith Ruwan, 2017-06-26 07:31:03