新しいフォルダー

気になったことや勉強したことについて書いていきます

PHP 正規表現(int/float/datetime)

バリデートメソッドを作ったのでメモって置く。

間違ってたらサーセン

テスト用の配列

$testInput = array(
//int
array('integer' => '123'),
array('integer' => 123),
array('integer' => -10),
array('integer' => '-10'), //ここまでOK
array('integer' => '123.01'),//ここまでNG
array('integer' => 123.01),
array('integer' => 'abc'),
array('integer' => 'テスト'),
//float
array('float' => '123'),
array('float' => 123),
array('float' => -10),
array('float' => '-10'),
array('float' => '123.01'),
array('float' => 123.01), //ここまでOK
array('float' => 'abc'), //ここからNG
array('float' => 'テスト'),
//datetime
array('datetime' => '123'),
array('datetime' => 123),
array('datetime' => -10),
array('datetime' => '-10'),
array('datetime' => '123.01'),
array('datetime' => 123.01),
array('datetime' => 'abc'),
array('datetime' => 'テスト'),
array('datetime' => '2000-10-1a 10:10'),
array('datetime' => '2000-10-10/10:10'),
array('datetime' => '2000-10-10-10:10'),
array('datetime' => '2000-10-10'),
array('datetime' => '20-10-10 1:1:1'), //ここまでNG
array('datetime' => '2000-10-10 1:0'), //ここからOK
array('datetime' => '2000-1-1 10:10'),
array('datetime' => '2000/10-10 10:10:00'),
array('datetime' => '2000-10/10 10:10:00')
);

チェック用の処理

foreach($testInput as $data){
 foreach($data as $key => $value){
  switch($key){
  case 'integer':
   echo (preg_match("/^[-]?[0-9]+$/", $value))
    ? "int_ok:$value<br>":"int_ng:$value<br>";
   break;
  case 'float':
  case 'double':
   echo (preg_match("/^[-]?[0-9]*[.]?[0-9]+$/", $value))
    ? "float_ok:$value<br>":"float_ng:$value<br>";
   break;
  case 'datetime':
   echo (preg_match("/^[0-9]{4}[-\/][0-9]{1,2}[-\/][0-9]{1,2}\s[0-9]{1,2}:[0-9]{1,2}(:[0-9]{1,2})?$/", $value))
    ? "datetime_ok:$value<br>":"datetime_ng:$value<br>";
   break;
  }
 }
}