Регулярное выражение не работает должным образом, когда я использую эмодзи в начале строки - PullRequest
0 голосов
/ 23 апреля 2020

Мой код написан на PHP. Я пытаюсь сохранить в своей базе данных темы электронных писем, которые я отправляю, только после того, как я удалю смайлики, которые я включаю в строки темы этих электронных писем. Я создал это регулярное выражение:

$cleansubject = preg_replace("/[^a-zA-Z0-9\s]/", "", $subject);

Это работает, когда у меня есть смайлики в конце строки, например:

enter image description here

Но если смайлик у меня есть в начале строки, он не работает, запись даже не сохраняется в моей базе данных:

enter image description here

Есть ли какие-либо проблемы, которые вы можете определить в моем регулярном выражении для достижения того, чего я хочу?

ОБНОВЛЕНИЕ 1: Очевидно, регулярное выражение просто отлично:

enter image description here

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Добавьте модификатор "u" к своему регулярному выражению, чтобы он обрабатывал строки как UTF-8.

$cleansubject = preg_replace("/[^a-zA-Z0-9\s]/u", "", $subject);

Или используйте встроенную функцию для удаления символов Unicode из вашей строки, например iconv , utf8_decode , mb_convert_encoding или перекодирование .

$cleansubject = trim(iconv('UTF-8', 'ASCII//IGNORE', $subject));
1 голос
/ 23 апреля 2020

Это может быть проблема кодирования (например, 3v4l ):

echo utf8_encode('⌨️,?,?, Learning Online: Digital Marketing Course');
// Output: ⌨ï¸,🖥,🖨, Learning Online: Digital Marketing Course

При попытке сопоставления с использованием вашего шаблона это не удается ( см. Здесь ), но если вы вместо этого сопоставляете любое количество несловесных символов без глобального флага , как здесь , вы соответствуете целому смайлику.

И, используя preg_match(), получается:

$re = '/\W*/';
$str = 'â¨ï¸,ð¥,ð¨, Learning online: Digital Marketing Course';
$subst = '';

$result = preg_replace($re, $subst, $str, 1);

echo "The result of the substitution is ".$result;
// Output: Learning online: Digital Marketing Course
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...