我有以下问题。 我需要根据用户设置的环境(货币)显示以下内容:
$sMyPromotion = 'this offer starts at {5000}';
// 5000 is the value in my default currency (euros for example) and
// needs to be converted to the user currency
// so I have a function that converts : convertRate($Price, $aCurrency)
// that returns for example: 6000 USD.
但我仍然坚持如何处理花括号和括号之间的内容,并将其替换为convertRate返回的内容,因为我对regexp不熟悉,preg ...
我需要做的事情:
$sOccurency = what is between curly brackets and the brackets;
$sMyPromotion = Replace $sOccurency with convertRate($sOccurency, $aCurrency);
所以在这个例子中: $ sMyPromotion ='此优惠从{5000}开始;
预期结果: $ sMyPromotion ='此优惠从6000美元开始;
答案 0 :(得分:1)
$sMyPromotion = preg_replace('@{(\d+)}@', '\\1$', $sMyPromotion);
或使用preg_replace_callback:
$sMyPromotion = preg_replace_callback ( '@{(\d+)}@',
function ($matches)
{
return $matches [1] . '$';
}, $sMyPromotion );
答案 1 :(得分:0)
为什么不把变量放入字符串?喜欢$sMyPromotion = 'this offer starts at '.$valueYouNeed;
?
答案 2 :(得分:0)
这个问题比我想象的要复杂一点。最明显的是,你必须处理你想要处理的所有货币的汇率。
和我一起 - 我以前从未写过一个php程序,但我想尝试一下,所以这是我的尝试;)
function TranslateRate($str, $currency)
{
$def_rate = 100;
if (!preg_match('/\{(\d+)\}/', $str, $value))
return $str; // Noting to translate
if ($currency = '$')
{
$dollar_rate=120;
$val_rate = ($value[1] / $def_rate);
return preg_replace('/(\{\d+\})/', $val_rate*$dollar_rate, $str);
}
// 'Unknown currency';
return $str;
}
echo TranslateRate("this offer starts at {5000}", '$');
这是您的翻译例程的一个非常粗略的版本,但它应该让您了解如何继续。
我甚至不知道如何在php中使用浮点运算,所以费率是美分;)
看到它正常工作at phpfiddle。
此致