読者です 読者をやめる 読者になる 読者になる

謎な処理

まず↓を見てもらいたい
$this->page = NULL;
if( isset($_GET['page']) )
{
  $this->page = $_GET['page'];
}
$this->page = (isset($this->page)===false || (int)$this->page<1 || preg_match('/^[0-9].*$/',$this->page)===0) ? 1 : $this->page;
 
他人が書いたコードであり意図も聞いてないので想像となるが
ぱっと見は、pageに変な値が入らないように、このようなチェックをしているように思える
 
しかし、よく見てみると「'/^[0-9].*$/'」の正規表現が数値チェックですらない事に気が付いた!
「1hoge」とか先頭が数字であればなんでも通りそうな正規表現です
だから一見冗長に見える書き方をしてるのか!見切ったぞと一瞬考えもした。
いあ・・しかし、これはページ処理のためのページ番号をいれるための値のはずと思い直して
意を決して書き直してみた。

A案

$this->page = 1;
if(preg_match('/^\d{1,}$/',(int)$_GET['page']) && (int)$_GET['page'] !== 0)
$this->page = (int)$_GET['page'];
}

B案

$this->page = 1;
if(preg_match('/^([1-9])|([1-9][0-9]+)$/',(int)$_GET['page']))
{
$this->page = (int)$_GET['page'];
}

A案とB案どっちの方が簡潔だろうか・・・などと悩んで今日も作業がはかどらない