繁体   English   中英

如何正确替换 PHP/Laravel 中的占位符文本,如果没有要替换的数据,如何回退到空字符串

[英]How do i properly replace a placeholder text in PHP/Laravel and fallback to empty string if no data to be replace

这是正文

你好,{first_name},来自{company}。 这是您的 email 地址:{email}。 您对{team} 的申请已获批准。

我有这些占位符的数据。 请注意,它缺少first_name & team

  • 公司:contoso inc
  • 姓名:约翰·多伊
  • email:我@contoso.com

预期结果:

您好,来自 contoso inc. 这是你的 email 地址:me@contoso.com。 您的申请已获批准。

这是我到目前为止所做的。

Str::of($content)->replaceMatches('/\{([^}]*)\}/', function ($match) use ($placeholders) {
            return data_get($placeholders, $match[1]);
    });

哪个产生

Hello, from contoso inc. This is your email address: me@contoso.com. Your application for has been approved.

请注意,在hello之后有空格,在for之后有双空格

您提供的代码没有问题。 但是格式不是您所期望的。

无法处理数据时, data_get将返回一个null值:

格式
Hello {first_name}, from {company}.
This is your email address: {email}.
Your application for {team} has been approved.
结果
Hello , from contoso inc.
This is your email address: me@contoso.com.
Your application for  has been approved.

NULL不会像您期望的那样改变任何东西,因为空格是您的 format

您可以简单地添加squish以删除所有无关的空白,并使用replace来更正[SPACE],的格式:

$text = Str::of($content)
    ->replaceMatches('/\{([^}]*)\}/', function ($match) use ($placeholders) {
        return data_get($placeholders, $match[1]);
    })
    ->replace(' ,', ',')
    ->squish();
Hello, from contoso inc.
This is your email address: me@contoso.com.
Your application for has been approved.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM