Scripts
Validatie klasse
Deze klasse heb ik geschreven om af te komen van alle is_string's in mijn code en die hele if's/else over te slaan. door zowel de mogelijkheid hebben alle variable type te beheren en de waarden van deze variable te controleren.
validatie-klasse
[code]
<?php
/**
* Validator Class
* Clean's input.
* Validates input.
*
* @author Thijs Damen
* @version 0.1
*
*/
Class Validator {
private $m_aCleanVars;
private $m_aErrors;
public function __construct() {
$this->m_aCleanVars = array();
$this->m_aErrors = array();
}
/**
* Function clean
* **Warning** This function cleans the input. makes sure var. types are set correctly. It does not however validate the input.
* Use function Validate() for that.
*
* @param array $p_aUncleanVars
* @return array $m_aCleanVars
*/
public function clean($p_aUncleanVars) {
foreach ($p_aUncleanVars as $aData) {
switch ($aData[0]) {
case "type_int":
$aData[1] = intval($aData[1]);
break;
case "type_uint":
($aData[1] = intval($aData[1])) < 0 ? 0 : $aData[1];
break;
case "type_num":
$aData[1] = strval($aData[1]) + 0;
break;
case "type_unum":
$aData[1] = strval($aData[1]) + 0;
$aData[1] = ($aData[1] < 0) ? 0 : $aData[1];
break;
case "type_str":
$aData[1] = trim(strval($aData[1]));
break;
case "type_bool":
$aData[1] = (bool) $aData[1];
break;
case "type_array":
$aData[1] = (is_array($aData[1])) ? $aData[1] : array();
break;
case "type_nohtml":
$aData[1] = htmlspecialchars(trim(strval($aData[1])));
break;
}
$this->m_aCleanVars[$aData[2]] = $aData[1];
}
return $this->m_aCleanVars;
}
/**
* Function validate
* Validates input.
*
* @param array $p_aUnvalidatedVars
*
*/
public function validate($p_aUnvalidatedVars) {
foreach ($p_aUnvalidatedVars as $aData) {
switch ($aData[0]) {
case "str_length":
if (!$this->strLength($aData[1], $aData[2], $aData[3])) {
$this->m_aErrors[] = $aData[4];
}
break;
case "is_empty":
if (!$this->isEmpty($aData[1])) {
$this->m_aErrors[] = $aData[2];
}
break;
case "is_num":
if (!$this->isNum($aData[1])) {
$this->m_aErrors[] = $aData[2];
}
break;
case "is_email":
if (!$this->isEmail($aData[1])) {
$this->m_aErrors[] = $aData[2];
}
break;
case "is_inrange":
if (!$this->isInRange($aData[1], $aData[2], $aData[3])) {
$this->m_aErrors[] = $aData[4];
}
break;
case "is_alpha":
if (!$this->isAlpha($aData[1])) {
$this->m_aErrors[] = $aData[2];
}
break;
}
}
}
/**
* function isEmpty
* checks if the given Value is empty. Handles Strings, Integers and Arrays
*
* @param mixed $p_mData
* @return false on failure., true on succes
*/
private function isEmpty($p_mData) {
if (is_string($p_mData)) {
if (trim($p_mData) == "") {
return false;
}
}
if (is_array($p_mData)) {
if (empty($p_mData)) {
return false;
}
}
if (is_integer($p_mData)) {
if (empty($p_mData)) {
return false;
}
}
if (empty($p_mData)) {
return false;
}
return true;
}
/**
* function isNum
* Checks if the given value is numeric. Can be either string or Int.
*
* @param mixed $p_mData
* @return false on failure, true on succes
*/
private function isNum($p_mData) {
if (!is_numeric($p_mData)) {
return false;
}
return true;
}
/**
* function isEmail
* Checks if the given value is an email.
*
* @param String $p_mData
* @return false on failure, true on succes
*/
private function isEmail($p_sData) {
if (is_string($p_sData)) {
$pattern = "/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/";
if(!preg_match($pattern, $p_sData)) {
return false;
}
} else{
return false;
}
return true;
}
/**
* function isAlpha
* checks if the given value are only Alphabetic (a-Z) values.
*
* @param string $p_sData
* @return false on failure, true on succes
*/
private function isAlpha($p_sData) {
if (is_string($p_sData)) {
$pattern = "/^[a-zA-Z]+$/";
if (!preg_match($pattern, $p_sData)) {
return false;
}
} else {
return false;
}
return true;
}
/**
* function strLength
* Checks the given value against the given min and max length.
*
* @param string $p_sStr
* @param integer $p_iStart
* @param integer $p_iEnd
* @return false on failure, true on succes
*/
private function strLength($p_sStr, $p_iStart, $p_iEnd) {
if (is_string($p_sStr) && is_numeric($p_iStart) && is_numeric($p_iEnd)) {
if (strlen($p_sStr) >= $p_iStart && strlen($p_sStr) <= $p_iEnd) {
return true;
} else {
return false;
}
} else {
return false;
}
}
/**
* function isInRange
* Checks if the numeric value is in the given range of values. Can be String or Int
*
* @param mixed $p_mInt
* @param mixed $p_mMin
* @param mixed $p_mMax
* @return false on failure, true on succes
*/
private function isInRange($p_mInt, $p_mMin, $p_mMax) {
if (is_numeric ($p_mInt) && is_numeric($p_mMin) && is_numeric($p_mMax)) {
if (!($p_mInt >= $p_mMin) OR !($p_mInt <= $p_mMax)) {
return false;
}
} else {
return false;
}
return true;
}
/**
* function getErrors
* Returns errors
*/
public function getErrors() {
if (!empty($this->m_aErrors)) {
$sErrors = '';
foreach ($this->m_aErrors as $sError) {
$sErrors .= $sError . '<br />';
}
}
return $sErrors;
}
}
[/code]
Hoe te gebruiken:
Cleaner:
[code]
<?php
$sString = 123;
$iInt = '1';
$bBool = 'waar';
$aArray = '123';
$unumNumber = -2;
$oValidator = new Validator;
$aClean = $oValidator->clean(array(
array('type_str', $sString, 'myString'),
array('type_int', $iInt, 'myInt'),
array('type_bool', $bBool, 'myBool'),
array('type_array', $aArray, 'myArray'),
array('type_unum', $unumNumber, 'myunsignedNum')
));
var_dump($aClean);
[/code]
Output:
[code]
array(5) {
["myString"]=>
string(3) "123"
["myInt"]=>
int(1)
["myBool"]=>
bool(true)
["myArray"]=>
array(0) {
}
["myunsignedNum"]=>
int(0)
}
[/code]
Zoals je ziet. alle typen zijn netjes de typen gewoorden waar ik om vroeg :) (ps. unsigned/signed is niet in php zelf uit te vinden. daarom op die manier.)
En de Validator:
[code]
<?php
$sString = 'Langerdanzes';
$sAlpha = 'NietAlphabetisch123_+)';
$oValidator = new Validator;
$oValidator->Validate(array(
array('str_length', $sString, 1, 6, '$sString moet langer zijn dan 1 en korter dan 6'),
array('is_alpha', $sAlpha, '$sAlpha mag alleen alphabetische karakters bevatten')
));
if ($oValidator->getErrors()) {
echo $oValidator->getErrors();
}
[/code]
En de result:
[code]
$sString moet langer zijn dan 1 en korter dan 6
$sAlpha mag alleen alphabetische karakters bevatten
[/code]
Simpeler kan niet zou ik zeggen.
Reacties
0