[英]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 地址: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.