preg_match_all упомянуть пользователя @ Laravel - PullRequest
0 голосов
/ 06 мая 2019

Я хотел бы найти упомянутого пользователя в сообщении и сохранить его в таблице. Здесь перечислены все введенные имена пользователей, написанные в записи за знаком @ и найденные в таблице «Пользователь», и идентификатор сохраняется пользователем. К сожалению, я не могу найти пользователей и, следовательно, не идентификатор пользователя. Как я могу найти идентификатор от пользователя?

$msg = I am a post and mention @username1 and @username2

      preg_match_all('/@(\w+)/', $msg, $mentionedUsers);

                foreach ($mentionedUsers[0] as $mentionedUser) {

                        $foundUser = User::find($mentionedUser);
                        if ($foundUser) {
                            $foundUserId = $foundUser->id;
                        }

                    $mentionedUser_save = new Mentioned_post_user;
                    $mentionedUser_save->user_id_lead = Auth::user()->id;
                    $mentionedUser_save->user_id = $foundUserId;
                    $mentionedUser_save->post_id = $post->id;
                    $mentionedUser_save->save();
                }

1 Ответ

2 голосов
/ 06 мая 2019

$mentionedUsers[0] - это массив целых совпадений, строки, которые начинаются с @, а затем имеют 1+ слова. Имена пользователей являются частями без @ и включены в группу 1.

Таким образом, вам нужно использовать

foreach ($mentionedUsers[1] as $mentionedUser)
                         ^

Тогда у вас будут идентификаторы пользователей без @ впереди.

Кроме того, если вы хотите избежать совпадения электронных писем, вы можете добавить \B до @ в регулярном выражении:

'/\B@(\w+)/'

Тогда символ @ будет сопоставляться только в том случае, если ему не предшествует слово char.

...