見出し画像

ゼロから始まるのは整数ではない?

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

冗長・・・


この記事が気に入ったらサポートをしてみませんか?