2013-11-27 132 views
0
 $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正則表達式不能正常工作

爲什麼preg_replace_callback犯規取3.45 [R 它以3比45的var_dump顯示此:

 array (size=2) 
    0 => string '3.13.05€' (length=10) 
    1 => string '1.00€' (length=7)
我tryed測試用的preg_replace正則表達式使其返回罰款3.45。 preg_replace_callback有什麼問題。我的正則表達式不好嗎?

+0

是原始代碼中的'$ matchn [1]'輸入錯誤還是僅僅是複製錯誤? – Barmar

+0

您的正則表達式只允許小數點後的一位數字,但您的示例有兩位數字。 – Barmar

+0

你是對的:D,謝謝.... –

回答

0

你的正則表達式有點關閉。由於您沒有錨點^$,匹配可以從字符串中的任何位置開始。在第一個例子中實際匹配的只是45Lt,這會給您帶來各種問題。

您還有$matchn[1]而不是$match[1],但這似乎只是這裏的一個錯字。

/^(\d+[,.]?\d*)(\s?)(L+T+L?)$/i 

我不知道你需要的+LT任後。

+0

在我的程序中,$ match [1]是正確的,我想我做了複製/粘貼misstake。但問題出在\ d ?. \ d +修復它。 –

+0

@DonatasVileita'\ d +'需要十進制數字。 '\ d *'允許0或更多 –