$input = array("3.45Lt", "1.00€");
function kazkas($match){
if($match[3]==="LTL"){
$match[3] = "EUR";
}
elseif($match[3]==="Lt" | $match[3]==="LT" | $match[3]==="lT" |$match[3] === "lt"){
$match[3] = "€";
}else{
$match[3]=$match[3];
}
$changeratio = 3.4488;
return number_format($matchn[1]/$changeratio,2).$match[2].$match[3];
//3.4492
}
$result = preg_replace_callback('/('d+[,.]?'d?)('s?)(L+T+L?)/iD','kazkas',$input);
var_dump($result);
我想找到所有带有 LT 或 LTL 的数字,并转换为欧元并更改货币徽标。
为什么preg_replace_callback不需要 3.45 ?r它需要 3 而不是 45 并且var_dump显示以下内容:
数组(大小 = 2( 0 =>字符串"3.13.05"(长度=10( 1 => 字符串 '1.00'¬' (长度 = 7(我试图用正则表达式测试正则表达式preg_replace它返回良好的 3.45。preg_replace_callback怎么了。我的正则表达式不好吗?
你的正则表达式有点不对劲。 由于您没有锚点^
和$
,因此匹配可以在字符串中的任何位置开始。 在第一个示例中实际匹配的是 45Lt
,这会导致您出现各种问题。
你也有$matchn[1]
而不是$match[1]
,但这似乎只是一个错字。
/^('d+[,.]?'d*)('s?)(L+T+L?)$/i
我不确定您是否在L
或T
后需要+
。