Подтвердить что ты не робот

PHP preg_replace специальные символы

Я хочу заменить все символы без буквы и числа, т.е. /&%#$ и т.д. с подчеркиванием (_) и заменить все ' (одинарные кавычки) на "" пустым (так что не подчеркивайте).

Итак, Там не было бы "(игнорировать двойные кавычки) станет" There_wouldnt_be_any ".

Я бесполезен в выражениях reg, следовательно, сообщение.

Приветствия

4b9b3361

Ответ 1

$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any");
$newstr = str_replace("'", '', $newstr);

Я помещаю их на две отдельные строки, чтобы сделать код более понятным.

Примечание. Если вы ищете поддержку Unicode, см. ответ Filip ниже. Он будет соответствовать всем символам, которые регистрируются как буквы в дополнение к A-z.

Ответ 2

Если вы пишете "не буквы и цифры", исключаете больше, чем [A-Za-z0-9] (т.е. рассматривая буквы типа åäö как буквы) и хотите иметь возможность точно обрабатывать строки UTF-8 \p{L} и \p{N} будет полезным.

  • \p{N} будет соответствовать любому "Число"
  • \p{L} будет соответствовать любому символу письма, который включает
    • Буквенное письмо
    • Модификационная буква
    • Другое письмо
    • Письмо с заголовком письма
    • Письмо верхнего регистра

Документация PHP: свойства символа Юникода


$data = "Thäre!wouldn't%bé#äny";

$new_data = str_replace  ("'", "", $data);
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data);

var_dump (
  $new_data
);

Выход

string(23) "Thäre_wouldnt_bé_äny"

Ответ 3

выполните это в два этапа:

  • заменить буквенные символы this regex:

    [\/\&%#\$]

  • заменить кавычки this regex:

    [\"\']

и используйте preg_replace:

$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString);
$stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters);