найти в строке и заменить - PullRequest
0 голосов
/ 06 мая 2020

У меня есть строка с именем $ body , и я пытаюсь заменить имена пользователей в этой строке, если они существуют в таблице пользователей, и обернуть их тегом привязки, код работает нормально, если только один пользователь находится в строка, но если в строке больше имени пользователя, моя функция срабатывает специально, если в таблице пользователей есть более одного пользователя, и один из них является реальным пользователем, а другой - нет.

public function setBodyAttribute($body)
{
preg_match_all('/@([\w\-]+)/', $body, $matches);
    $users = $matches[1];

    foreach ($users as $user) {
        if (User::where('name', $user)->exists()) {
            $body = preg_replace($pattern, '<a href=/profiles/$1>$0</a>', $body);
        }
    }

    $this->attributes['body'] = $body;
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2020
preg_match('/@([\w\-]+)/', $body, $matches);

$users=User::whereIn('name',$matches[1])->pluck('name')->toArray()

foreach($users as $user) {
        $body = str_replace('@'.$user, "<a href=/profiles/$user> 
        <strong>@$user</strong></a>", $body);
    }

    $this->attributes['body'] = $body;
0 голосов
/ 06 мая 2020

Попробуйте сделать так:

$newuser = preg_replace("/@{$user}/", "<a href=/profiles/$user>@$user</a>", $body);
...