1

我正在尝试找到一段正则表达式来删除货币格式。

我有两种货币价值。一种是美元格式,如 1,000.00,另一种是欧元,如 1.000,00。我需要通过删除逗号和点(如 1000.00)将值保存到 db

比如用户输入USD的值比如2,222.65,需要替换成2222.65,

如果用户输入像 2.222,65 这样的欧元值,它也需要替换为 2222.65,

4

3 回答 3

1

Instead of complex regex, use NumberFormatter::parse available for 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
于 2013-07-31T11:36:07.617 回答
1

一个灵魂来匹配正在使用的分隔符,并将其更改为您喜欢的分隔符

<?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);
    }
?>

注意:我更喜欢在 # insted of / 中使用我的正则表达式,因为我经常在我的正则表达式中使用 /,如果你喜欢 / 你可以使用/[^0-9]+//^(?<integer>.*)(?<separator>[\.,])(?<decimals>[0-9]+)$/

于 2013-07-31T11:34:22.780 回答
0

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

    $str = "2,222.65";
    $clean = preg_replace('/[^\d]/', '', $str);
    $clean = substr($clean, 0,-2) . "." . substr($clean,-2);
于 2013-07-31T20:14:23.077 回答