147 lines
3.8 KiB
PHP
147 lines
3.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace api\core;
|
||
|
|
||
|
|
||
|
class Checker{
|
||
|
|
||
|
|
||
|
/* VERIFICATIONS DES TYPES UTILES GENERIQUES
|
||
|
*
|
||
|
* @type<String> Type que l'on veut verifier
|
||
|
* @value<mixed*> Valeur a verifier
|
||
|
*
|
||
|
* @return match<Boolean> Retourne si oui ou non la valeur @value est du bon type @type
|
||
|
*
|
||
|
*/
|
||
|
public static function run($type, $value){
|
||
|
$checker = true;
|
||
|
|
||
|
/* [0] On verifie que $value n'est pas nul
|
||
|
=========================================================*/
|
||
|
if( is_null($value) ) return false;
|
||
|
|
||
|
|
||
|
|
||
|
/* [1] Si de type VARCHAR(min, max, flags)
|
||
|
=========================================================*/
|
||
|
if( preg_match('/^varchar\((\d+), ?(\d+)((?:, ?\w+)+)?\)$/', $type, $match) ){
|
||
|
// On recupere la taille min
|
||
|
$min = (int) $match[1];
|
||
|
// On recupere la taille max
|
||
|
$max = (int) $match[2];
|
||
|
|
||
|
// On recupere le sous-type si défini
|
||
|
$flags = isset($match[3]) ? explode(',', substr($match[3], 1)) : null;
|
||
|
|
||
|
// On effectue la verification de taille
|
||
|
$lenCheck = $checker && is_string($value) && strlen($value) <= $max && strlen($value) >= $min;
|
||
|
|
||
|
// On vérifie les FLAGS s'il est donné
|
||
|
if( is_array($flags) )
|
||
|
foreach( $flags as $flag )
|
||
|
$lenCheck = $lenCheck && self::run($flag, $value);
|
||
|
|
||
|
return $lenCheck;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* [2] Si de type ARRAY(type_elements)
|
||
|
=========================================================*/
|
||
|
if( preg_match('/^array<(.+)>$/', $type, $match) ){
|
||
|
|
||
|
// Si c'est pas un tableau on retourne une erreur
|
||
|
if( !is_array($value) )
|
||
|
return false;
|
||
|
|
||
|
|
||
|
$elements_type = $match[1];
|
||
|
|
||
|
// On verifie le type pour chaque element
|
||
|
foreach($value as $element)
|
||
|
// Si erreur dans au moins 1 element, on retourne que c'est incorrect
|
||
|
if( !self::run($elements_type, ($element) ) )
|
||
|
return false;
|
||
|
|
||
|
// Si aucune erreur, on retourne que tout est bon
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* [n] Sinon, tous les autres types definis
|
||
|
=========================================================*/
|
||
|
switch($type){
|
||
|
// Quoi que ce soit
|
||
|
case 'mixed':
|
||
|
return $checker && !is_null($value);
|
||
|
break;
|
||
|
|
||
|
// Entier positif (id dans BDD)
|
||
|
case 'id':
|
||
|
return $checker && is_numeric($value) && $value <= 2147483647 && $value >= 0;
|
||
|
break;
|
||
|
|
||
|
// Code RFID
|
||
|
case 'rfid':
|
||
|
return $checker && is_string($value) && preg_match('/^[\dA-F]{2}(\-[\dA-F]{2}){3,5}$/i', $value);
|
||
|
break;
|
||
|
|
||
|
// String quelconque (peut etre vide)
|
||
|
case 'text':
|
||
|
return $checker && is_string($value);
|
||
|
|
||
|
// Adresse mail (255 caracteres max)
|
||
|
case 'mail':
|
||
|
return $checker && is_string($value) && strlen($value) <= 50 && preg_match('/^[\w\.-]+@[\w\.-]+\.[a-z]{2,4}$/i', $value);
|
||
|
break;
|
||
|
|
||
|
// Hash sha1/md5
|
||
|
case 'hash':
|
||
|
return $checker && is_string($value) && preg_match('/^[\da-f]+$/i', $value) && (strlen($value) == 40 || strlen($value) == 64);
|
||
|
break;
|
||
|
|
||
|
case 'alphanumeric':
|
||
|
return $checker && is_string($value) && preg_match('/^[\w\.-]+$/ui', $value);
|
||
|
break;
|
||
|
|
||
|
case 'letters':
|
||
|
return $checker && is_string($value) && preg_match('/^[a-z -]+$/i', $value);
|
||
|
break;
|
||
|
|
||
|
case 'status':
|
||
|
return $checker && is_numeric($value) && floor($value) == $value && $value >= 0 && $value <= 100;
|
||
|
break;
|
||
|
|
||
|
// Tableau non vide
|
||
|
case 'array':
|
||
|
return $checker && is_array($value) && count($value) > 0;
|
||
|
break;
|
||
|
|
||
|
// Boolean
|
||
|
case 'boolean':
|
||
|
return $checker && is_bool($value);
|
||
|
break;
|
||
|
|
||
|
// Objet non vide
|
||
|
case 'object':
|
||
|
return $checker && is_object($value) && count((array) $value) > 0;
|
||
|
break;
|
||
|
|
||
|
// Chaine JSON (on vérifie via le parser)
|
||
|
case 'json':
|
||
|
return $checker && is_string($value) && json_decode($value, true) !== NULL;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
return false;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return $checker;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
?>
|