PHP preg_replace специальные символы
Я хочу заменить все символы без буквы и числа, т.е. /&%#$
и т.д. с подчеркиванием (_)
и заменить все '
(одинарные кавычки) на "
" пустым (так что не подчеркивайте).
Итак, Там не было бы "(игнорировать двойные кавычки) станет" There_wouldnt_be_any ".
Я бесполезен в выражениях reg, следовательно, сообщение.
Приветствия
Ответы
Ответ 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
выполните это в два этапа:
и используйте preg_replace
:
$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString);
$stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters);