【发布时间】:2013-11-27 16:25:59
【问题描述】:
$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 有什么问题。我的正则表达式不好吗?
【问题讨论】:
-
是原始代码中的
$matchn[1]错字还是这里的复制错误? -
你的正则表达式只允许小数点后1位,但你的例子有2位。
-
你说得对:D,谢谢......