Удалить все несоответствующие символы в строке PHP?

У меня есть текст, из которого я хочу удалить все символы, которые НЕ являются следующими.

required_characters =

0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n

Последняя - это \n (новая строка), которую я хочу сохранить.

Ответы

Ответ 1

Чтобы сопоставить все символы, кроме перечисленных, используйте инвертированный набор символов [^…]:

$chars = "0123456789!&',-./abcdefghijklmnopqrstuvwxyz\n";
$pattern = "/[^".preg_quote($chars, "/")."]/";

Здесь preg_quote используется для удаления определенных специальных символов, чтобы они интерпретировались как буквенные символы.

Вы также можете использовать диапазоны символов для выражения перечисленных символов:

$pattern = "/[^0-9!&',-.\\/a-z\n]/";

В этом случае не имеет значения, экранирован литеральный - в ,-. или нет. Поскольку ,-. интерпретируется как диапазон символов от , (0x2C) до . (0x2E), который уже содержит - (0x2D) между ними.

Затем вы можете удалить те символы, которые соответствуют preg_replace:

$output = preg_replace($pattern, "", $str);

Ответ 2

$string = 'This is anexample $tring! :)';
$string = preg_replace('/[^0-9!&\',\-.\/a-z\n]/', '', $string);

echo $string; // hisisanexampletring!

^ Это чувствительно к регистру, поэтому капитал T удаляется из строки. Чтобы позволить заглавные буквы, $string = preg_replace('/[^0-9!&\',\-.\/A-Za-z\n]/', '', $string)