2011-08-08 8 views
0

:iは整数値に変換するにはどうすればよいPreg_match:文字列からポイントを区切った数字(1桁から3桁まで)(金額)を読み取る方法は?たとえば

30€ 
30,00€ 
1.450€ 
798.000.000,00€ 
12.567.789.985,00€ 

intval()は、文字列の実際の値より前に異なる数値が発生する可能性があるため使用できません。

+1

の可能重複[正規表現 - ストリップ以外の数値およびもしあればセントを削除](http://stackoverflow.com/質問/ 4676065/regex-strip-non-numeric-and-remove-cents-if-any) – hakre

答えて

0

すべての最初にスペースを削除し、$記号

$num = substr("30€", 0, -1); 

を削除 ''または '、'をstr_replaceで返す

$num = str_replace('.', '', $num); 
$num = str_replace(',', '', $num); 

これは整数である必要があります。試してみてください! 欲しいものは

1

いつもで終わりますか?

もしそうなら、これを試してみてください。

$number = preg_replace('/[^\d]/', '', preg_replace('/.*?([\d\.,]+)€.*/', '$1', $i)); 

この

が数値の前または後に任意の文字を任意の文字列を検索し、ちょうど数(無コンマ、ピリオド、またはユーロ記号)を返します。

+0

ああ、誰かが作業コピーをコピー&ペーストしたい場合は、http://pastebin.com/TmULJamb – OverZealous

0

あなたはあなたが小数点以下の桁で何をしたいかを指定する必要があります正規表現

$str='798.000.000,00€'; 

$res = strtr($str,array("." => "", "€" => "","," => ".")); 

var_dump(intval($res)); 
0

せずにそれを行うことができます。それらを無視したり、保存したりしますか?私はフロートがより適切かもしれないと思う。そうであれば、ドット(ちょうどグループ化に使用された)を金記号に置き換え、 "、"を適切な小数点に置き換えて、値を浮動小数点に変換します。 いい構文解析関数もありますHere

0

すべての数字に共通のパターンがありますが、正規表現は数字を抽出するパターンと一致する必要があります。そして、あなたは整数値に見つかった数値を変換することができます:

$str = '30€ 
30,00€ 
1.450€ 
798.000.000,00€ 
12.567.789.985,00€'; 

$pattern = '~[1-9]\d{0,2}(?:\.\d{3})*~'; 

$r = preg_match_all($pattern, $str, $matches); 

$intValues = array_map(function($v) {return (int) str_replace('.', '', $v);}, $matches[0]); 

print_r($intValues); 

出力:

Array 
(
    [0] => 30 
    [1] => 30 
    [2] => 1450 
    [3] => 798000000 
    [4] => 2147483647 
) 
関連する問題