[PHP]フォームの値が整数かどうかチェックする関数

Read More

HTMLのフォームから受け取った値が、
"整数"であるかどうかをチェックするズバリな関数はPHPにはない。


そしてis_numeric()やis_int()はそのまま使うと問題がある
is_numeric()
1.小数点、16進数なども許可してしまう
2.指数(1e4)も許可してしまう

is_int()
1.文字列型が許可されない



つまりis_numeric()の場合は
http://example.com/?num=1.1
でも許可されてしまい、

is_int()では単純な
http://example.com/?num=1
ですらfalseが返ってくる。
# 値を文字列として受け取る為



--
で、たちまち作ってみたのが以下の関数
/**
 * 文字列型か数値型かを区別せず"整数"かどうかのみをチェック
 * 注)nullは許可しない
 * @return true or false
 */
function isAboutInt($var=null) {
  $chk = true;
  if($chk) $chk = is_numeric($var);
  if($chk) $chk = is_int((int)$var);
  if($chk) $chk = preg_match('/^([\-]{0,1})([0-9]+)$/u', $var);
  if($chk) {
    $var = str_replace('-', '', $var);  // ハイフン除去
    if(strlen($var) >= 2) {
      if(strpos($var, '0', 0)===0) {  // 先頭が0
        $chk = false;
      }// end if
    }// end if
  }// end if
  return $chk;
}// end function



なおHTMLフォームの値のみに利用を限定するのなら"文字列型"で"整数"かどうかだけで良いのだが、
自分はあちこちで使いたかったので"数値型"でもあえて許可した。


うん、組み方はともかく機能はこれがイイ


続き
http://shirasaya.if.land.to/?m=detail&hid=141