2015-10-29 128 views
1

在PHP中,我試圖去除除數字和與數字關聯的小數點之外的價格。用我當前的正則表達式,我無法確定小數是否與數字值或貨幣符號相關聯。有任何想法嗎?PHP正則表達式 - 去除所有非數字和小數

preg_replace('/[^(0-9).]/', '', $price)

測試值=>期望值

  1. 43.99 $ => 43.99
  2. ฿2,320.00 => 2320.00
  3. KR。 479.00 => 479.00
  4. 1 999руб。 => 1999年
+0

從你的性格類,除非你想允許'去掉括號('和') '作爲有效的字符。 –

+1

這應該是個訣竅:'[^ \ d \。]' – lintmouse

+0

如果小數位跟蹤數字,那應該不是問題,因爲這個數字只會被當作一個整數。我可能只是做你正在做的事情,然後投入浮動。 –

回答

1

可以實現與

'/[^\d.]|(?<!\d)\./' 

它非數字和非週期或者未前面有一個數字週期相匹配。然後,只需替換爲空字符串以刪除匹配的文本。

IDEONE demo

$re = '/[^\d.]|(?<!\d)\./'; 
$ar = array("\$43.99", "฿2,320.00", "kr. 479.00", "1 999 руб."); 
$result = preg_filter($re, "", $ar); 
print_r($result); 

輸出:

[0] => 43.99 
[1] => 2320.00 
[2] => 479.00 
[3] => 1999 

一個preg_replace demo

$re = '/[^\d.\n]|(?<!\d)\./'; // \n is added just for demo purposes! 
$str = "\$43.99\n฿2,320.00\nkr. 479.00\n1 999 руб."; 
echo $result = preg_replace($re, "", $str); 
+0

不知道我是否應該保留'preg_filter'演示....我現在已經半睡着了。 –

相關問題