Регулярное выражение для удаления не буквенно-цифровых символов из строк UTF8
Как я могу удалить символы, такие как пунктуация, запятые, тире и т.д. из строки, с многобайтовой безопасностью?
Я буду работать с вводами из разных языков, и мне интересно, есть ли что-то, что может мне помочь с этим
Спасибо
Ответы
Ответ 1
Существует класс символов юникода, который вы можете использовать:
Чтобы сопоставить любые небуквенные символы, вы можете просто использовать \PL+
, отрицание \p{L}
. Чтобы не удалять пробелы, используйте charclass, например [^\pL\s]+
. Или просто просто удалите знаки препинания с помощью \pP+
Ну и, очевидно, не забудьте модификатор regex /u
.
Ответ 2
Я использовал это:
$clean = preg_replace( "/[^\p{L}|\p{N}]+/u", " ", $raw );
$clean = preg_replace( "/[\p{Z}]{2,}/u", " ", $clean );
Ответ 3
Похожие сообщения
Удалить символы не-utf8 из строки
Я не уверен, что это касается всех символов.
В соответствии с этим сообщением на форуме dreamincode
http://www.dreamincode.net/forums/topic/78179-regular-expression-to-remove-non-ascii-characters/
это должно работать
/[^\x{21}-\x{7E}\s\t\n\r]/
Ответ 4
Возможно, это будет полезно?
$newstring = preg_replace('/[^0-9a-zA-Z\s]/', $oldstring);