ゼロから始まるのは整数ではない?
PHPのfilter_varとかfilter_inputで整数かどうかのフィルタリングするのに「FILTER_VALIDATE_INT」って使いますよね?
半角スペースに囲まれてても通過するぐらい緩いフィルタリングなので油断してたのですが品番に使う0から始まる整数をフィルタリングするとうまく判定されない。
$value = '0000123456789';
var_dump(filter_var($value, FILTER_VALIDATE_INT));
→ false
「あーゼロスタートで8進数と勘違いしたのか?」と思って8進数に無い「8」「9」を消してみたがダメ。
$value = '00001234567';
var_dump(filter_var($value, FILTER_VALIDATE_INT));
→ false
仕方ないので前処理で頭のゼロを消したら通ったが今度はゼロが消される
(まあ整数化されるので当然か・・・)
$value = '0000123456789';
var_dump(filter_var(preg_replace('/^0+([1-9])/', '$1', $value), FILTER_VALIDATE_INT));
→ 123456789
仕方ないので判定だけ任せて値はスルーさせる事にした。
$value = '0000123456789';
$_value = filter_var(preg_replace('/^0+([1-9])/', '$1', $value), FILTER_VALIDATE_INT);
var_dump(($_value === false || $_value === null)? $_value:$value);
→ 0000123456789
冗長・・・
この記事が気に入ったらサポートをしてみませんか?