phpのnumber_format。
3桁で数値を区切ってくれるこの関数。超便利ですよね。
perlを中心に使っていた当時は、その楽さに驚きました。
でも、この関数、数字以外が入ってくると、とたんにエラーを吐くんです。
異常な例
$yen = "123456円";
$yen = number_format($yen);
こんなパターン。
そりゃそうです。仕様でもnumericを渡せとなっていますので(笑)
正規表現で処理する
perlだと、こんな正規表現で同じように処理できますので、
$yen = "123456円";
$yen =~ s/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/$1,/g;
phpでも次のように書いてあげれば幸せになれます。
$yen = preg_replace('/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/', "$1,", $yen);
関数なりメゾットなりで対応
こんな感じの関数を作って、ヘルパー関数などで使うと汎用的に使えます。
public function number_format_org($val){
return preg_replace('/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/', "$1,", $val);
}
久しぶりに、perlをいじっていて思い出したのでメモを残しておきました。