web-dev-qa-db-ja.com

PHP数値文字列からコンマを削除

PHPには、すべての文字列である変数の配列があります。格納される値の一部は、コンマ付きの数値文字列です。

必要なもの:

文字列からコンマをトリムする方法。数値文字列に対してのみこれを行います。これは見た目ほど簡単ではありません。主な理由は、以下が失敗することです。

$a = "1,435";

if(is_numeric($a))
    $a = str_replace(',', '', $a);

$a = "1435"は数値です。しかし、$a = "1,435"は数値ではありません。取得する文字列の一部はコンマを含む通常の文になるため、すべての文字列で文字列置換を実行することはできません。

43
user1082428

テストされていませんが、おそらくif(preg_match("/^[0-9,]+$/", $a)) $a = str_replace(...)のようなものです

21
Kenaniah

他の方法でそれを行う:

$a = "1,435";
$b = str_replace( ',', '', $a );

if( is_numeric( $b ) ) {
    $a = $b;
}
88
JJJ

最も簡単な方法は次のとおりです。

$var = intval(preg_replace('/[^\d.]/', '', $var));

またはフロートが必要な場合:

$var = floatval(preg_replace('/[^\d.]/', '', $var));
17
Jayela

これを試してください。これは私のために働いた

number_format(1235.369,2,'.','')

このようなnumber_formatを使用すると、number_format(1235.369,2)の答えは1,235.37になります

しかし、以下のように使用する場合

number_format(1235.369,2,'.','')答えは1235.37

「1,235.37」の「、」を削除しています

2
kaushi
 function cleanData($a) {

     if(is_numeric($a)) {

     $a = preg_replace('/[^0-9,]/s', '', $a);
     }

     return $a;

}
2
Ryan

alsoに単語が含まれる文字列内の数値からコンマを削除する場合、preg_replace_callbackを使用するのが最も簡単だと思います。

例:

$str = "Hey hello, I've got 12,500 kudos for you, spend it well"

function cleannr($matches)
{
    return str_replace("," , "" , $matches["nrs"]);
}

$str = preg_replace_callback ("/(?P<nrs>[0-9]+,[0-9]+)/" , "cleannr" , $str);


出力:

「こんにちは、私はあなたのために12500の名誉を持っています、それをうまく使います」


この場合、他のコンマ(句読点)を削除したくないため、パターン(正規表現)は受け入れられた回答で指定されたものとは異なります。

ここで/[0-9,]+/の代わりに/[0-9]+,[0-9]+/を使用すると、出力は次のようになります。

「こんにちは、私はあなたがそれを上手に使うために12500の名誉を持っています」

1
Flaxious

あなたが探しているものの理想的な解決策はfilter_var()であるように聞こえます:

$a = filter_var($a, FILTER_VALIDATE_FLOAT, FILTER_FLAG_ALLOW_THOUSAND);

(現在はFILTER_FLAG_ALLOW_THOUSANDオプションがないため、FILTER_VALIDATE_INTではなくFILTER_VALIDATE_FLOATを使用していることに注意してください)。

0
orrd