<?php class LogicException extends Exception{} class InvalidArgumentException extends LogicException{} abstract class validator { protected $wymagane = TRUE; protected $min; protected $max; protected $zmienna; public function __construct($zmienna) { $this->zmienna = $zmienna; } { $validacja = new integerValidator($min); if (!$validacja->sprawdz()) { throw new InvalidArgumentException ("argument funkcji min() musi być liczba"); } $this->min = $min; } { $validacja = new integerValidator($max); if (!$validacja->sprawdz()) { throw new InvalidArgumentException ("argument funkcji max() musi być liczba"); } $this->max = $max; } public function wymagane($wymagane) { { throw new InvalidArgumentException ("argument funkcji wymagane() musi być typu boolean"); } $this->wymagane = $wymagane; } protected function typ(){} protected function dlugosc($dlugosc) { $min = $this->min; $max = $this->max; { if ( $dlugosc < $min OR $dlugosc > $max ) { return FALSE; } } { if ( $dlugosc < $min ) { return FALSE; } } { if ( $dlugosc > $max ) { return FALSE; } } return TRUE; } public function sprawdz() { { return FALSE; } { if ( !$this->typ() ) { return FALSE; } if ( !$this->dlugosc() ) { return FALSE; } } return TRUE; } } class stringValidator extends Validator { protected function dlugosc() { if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { { return FALSE; } return TRUE; } } class emailValidator extends stringValidator { public function typ() { { return FALSE; } return TRUE; } } class integerValidator extends Validator { protected function dlugosc() { $dlugosc = $this->zmienna; if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { { return FALSE; } return TRUE; } } class passValidator extends stringValidator { public function __construct($pass,$pass2) { $this->zmienna["pass"] = $pass; $this->zmienna["pass1"] = $pass2; } protected function porownanie() { if ($this->zmienna["pass"] == $this->zmienna["pass1"]) { return TRUE; } return FALSE; } public function sprawdz() { if (!$this->porownanie()) { return FALSE; } $this->zmienna = $this->zmienna["pass"]; if (!parent::sprawdz()) { return FALSE; } return TRUE; } } class peselValidator extends integerValidator { protected function dlugosc() { $this->min(11); $this->max(11); if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { } } class nipValidator extends integerValidator { protected function dlugosc() { $this->min(10); $this->max(10); if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { if (!parent::typ()) { return FALSE; } $intSum=0; for ($i = 0; $i < 9; $i++) { $intSum += $arrSteps[$i] * $str[$i]; } $int = $intSum % 11; $intControlNr=($int == 10)?0:$int; if ($intControlNr == $str[9]) { return true; } return false; } } class regonValidator extends integerValidator { protected function dlugosc() { $this->min(9); $this->max(9); if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { if (!parent::typ()) { return FALSE; } $intSum=0; for ($i = 0; $i < 8; $i++) { $intSum += $arrSteps[$i] * $str[$i]; } $int = $intSum % 11; $intControlNr=($int == 10)?0:$int; if ($intControlNr == $str[8]) { return true; } return false; } } class nrbValidator extends integerValidator { public function __construct($zmienna) { } protected function dlugosc() { $this->min(26); $this->max(26); if (!parent::dlugosc($dlugosc)) { return FALSE; } return TRUE; } protected function typ() { if (!parent::typ()) { return FALSE; } $aWagiCyfr = array(1, 10, 3, 30, 9, 90, 27, 76, 81, 34, 49, 5, 50, 15, 53, 45, 62, 38, 89, 17, 73, 51, 25, 56, 75, 71, 31, 19, 93, 57); // Dodanie kodu kraju (w tym przypadku dodajemu kod PL) $iNRB = $iNRB.'2521'; $iSumaCyfr = 0; for($i = 0; $i < 30; $i++) { $iSumaCyfr += $iNRB[29-$i] * $aWagiCyfr[$i]; } return ($iSumaCyfr % 97 == 1); } } ?>
Przykład wykorzystania:
<?php $tekst = "jakis tekst"; $validacja = new stringValidator($tekst); $validacja->min(2); $validacja->max(10); $validacja->wymagane(FALSE); if ( $validacja->sprawdz() ) { }else{ } ?>
Klasy napisane są obiektowo pod php5 które mozemy dowolnie rozszerzac i dodawac nowe typy walidacji.
Dla większej czytelnosci kodu zamieszczam strukture klas:
abstract class validator { protected $wymagane = 1; protected $min; protected $max; protected $zmienna; public function __construct($zmienna) public function min( $min ) public function max( $max ) public function wymagane($wymagane) protected function typ(){} protected function dlugosc($dlugosc) public function sprawdz() class stringValidator extends Validator protected function dlugosc() protected function typ() class emailValidator extends stringValidator public function typ() class integerValidator extends Validator protected function dlugosc() protected function typ() class passValidator extends stringValidator public function __construct($pass,$pass2) protected function porownanie() public function sprawdz() class peselValidator extends integerValidator protected function dlugosc() protected function typ() class nipValidator extends integerValidator protected function dlugosc() protected function typ() class regonValidator extends integerValidator protected function dlugosc() protected function typ() class nrbValidator extends integerValidator public function __construct($zmienna) protected function dlugosc() protected function typ()