次の値がある場合:
$var1 = AR3,373.31
$var2 = 12.322,11T
新しい変数を作成して、コンマとピリオドを除いて、数値以外の文字が削除されたデータのコピーに設定するにはどうすればよいですか?上記の値は次の結果を返します。
$var1_copy = 3,373.31
$var2_copy = 12.322,11
次の値がある場合:
$var1 = AR3,373.31
$var2 = 12.322,11T
新しい変数を作成して、コンマとピリオドを除いて、数値以外の文字が削除されたデータのコピーに設定するにはどうすればよいですか?上記の値は次の結果を返します。
$var1_copy = 3,373.31
$var2_copy = 12.322,11
回答:
次のように、preg_replaceを使用して、数字以外のすべての文字とコンマおよびピリオド/完全ストップを入れ替えることができます。
<?php
$testString = '12.322,11T';
echo preg_replace('/[^0-9,.]/', '', $testString);
?>
これはとても古い質問なので、ここでfilter_varについて言及されていないことに驚いています...
PHPには、サニタイズフィルターを使用してこれを行う組み込みのメソッドがあります。具体的には、この状況で使用FILTER_SANITIZE_NUMBER_FLOAT
するのはFILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND
フラグを使用することです。そのようです:
$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"
PHPに組み込まれているため、PHPの現在のライブラリで正規表現を使用するよりもわずかに高速です(文字どおりナノ秒単位です)。
すべての非数値文字を本当に削除する最も簡単な方法:
echo preg_replace('/\D/', '', $string);
\D
「10進数ではない任意の文字」を表します
を使用filter_var
して、数字、ドット、およびカンマを除くすべての無効な文字を削除できます。
FILTER_SANITIZE_NUMBER_FLOAT
フィルタは、文字列からすべての非数値文字を削除するために使用されます。FILTER_FLAG_ALLOW_FRACTION
分数区切りを許可しています " . "
FILTER_FLAG_ALLOW_THOUSAND
文字列からカンマを取得する目的。コード
$var1 = '12.322,11T';
echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
出力
12.322,11
filter_var()およびサニタイズフィルターの詳細を読むには
文字が常に最初または最後にある場合は、単にトリムを使用するだけです...正規表現は必要ありません
$string = trim($string, "a..zA..Z"); // this also take care of lowercase
"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11" --> "12.322,11"
middaparkaと同じ答えですが、,.
$unformatted_phone = "phone 122-3222223.ext 442";
echo preg_replace("/[^0-9]/", "", $unformatted_phone);