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;
}
}
}