1

通貨形式を削除する正規表現を見つけようとしています。

2 種類の通貨値があります。1 つは 1,000.00 のような USD 形式で、もう 1 つは 1.000,00 のような EUR 形式です。1000.00 のようにカンマとドットの両方を削除して、値を db に保存する必要があります

たとえば、ユーザーが 2,222.65 のような USD で値を入力した場合、2222.65 に置き換える必要があります。

ユーザーが 2.222,65 のように EUR で値を入力した場合、2222.65 に置き換える必要もあります。

4

3 に答える 3

1

複雑な正規表現の代わりに、NumberFormatter::parseavailable 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";

出力:

1234567.891
9876543.012
于 2013-07-31T11:36:07.617 に答える
1

使用中のセパレーターに合わせて、好みのものに変更するための 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);
    }
?>

注意: 私は正規表現の中で / を使用することが多いので、/ の代わりに # 正規表現を使用することを好みます/[^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 に答える