2013-07-31 41 views
1

我正试图找到一块正则表达式来删除货币格式。使用正则表达式删除货币格式

我有两种类型的货币值。一种是1,000.00美元的格式,另一种是1000,000欧元的欧元格式。我需要同时去除逗号到数据库保存的价值和点状1000.00

例如,如果用户输入像2,222.65美元的价值,它需要更换至2222.65,

如果用户进入在欧元价值像2.222,65它也需要更换至2222.65,

回答

1

而是复杂的正则表达式,使用NumberFormatter::parse可供PHP 5 >= 5.3.0, PECL intl >= 1.0.0

// German format 
$fmt = new NumberFormatter('de_DE', NumberFormatter::DECIMAL); 
$num = "1.234.567,891"; 
echo $fmt->parse($num)."<br>\n"; 

// USD format 
$fmt = new NumberFormatter('en_US', NumberFormatter::DECIMAL); 
$num = "9,876,543.012"; 
echo $fmt->parse($num)."<br>\n"; 

OUTPUT:

1234567.891 
9876543.012 
+0

可以skipp的郎代码,使其自动,所以你不到风度需要知道什么格式,用户要使用时,用户可能会瑞典和使用“1 234 567,89” –

+0

我认为locale是一个必需的字符串,用于为特定区域设置解析正确格式的字符串。 – anubhava

+0

不客气。 – anubhava

1

一个soultion以匹配什么用分离器,并将其更改为你prefere

<?php 

    /* split input in 3 parts: integer, separator, decimals */ 
    if(preg_match('#^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$#', $input, $matches)) 
    { 
     /* clean integer and append decimals with your own separator */ 
     $number = ((int) preg_replace('#[^0-9]+#', '', $matches['integer']) . '.' . $matches['decimals'] 
    } 
    else 
    { 
     $number = (int) preg_replace('#[^0-9]+#', '', $input); 
    } 
?> 

公告一:我希望有我在#中插入正则表达式,因为我使用/在我的内部正则表达式,如果 喜欢YPU /你可以使用/[^0-9]+//^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$/

0

这假定他们都有小数,但它是最干净的。

$str = "2,222.65"; 
    $clean = preg_replace('/[^\d]/', '', $str); 
    $clean = substr($clean, 0,-2) . "." . substr($clean,-2); 
+0

谢谢你。但请检查输入2,222.765 –