Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> klasa validator
skubekk
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 8.08.2003
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


Klasy do walidacji zmiennych. Za pomocą klas mozemy sprawdzic czy zmienna jest jest liczbą, tekstem, poprawnym emailem.... Jak wam podoba sie to rozwiązanie? Prosze o opinie na jej temat:]
  1. <?php
  2. class LogicException extends Exception{}
  3. class InvalidArgumentException extends LogicException{}
  4. abstract class validator
  5. {
  6. protected $wymagane = TRUE;
  7. protected $min;
  8. protected $max;
  9. protected $zmienna;
  10.  
  11. public function __construct($zmienna)
  12. {
  13. $this->zmienna = $zmienna;
  14. }
  15. public function min( $min )
  16. {
  17. $validacja = new integerValidator($min);
  18. if (!$validacja->sprawdz())
  19. {
  20. throw new InvalidArgumentException ("argument funkcji min() musi być liczba");
  21. }
  22. $this->min = $min;
  23. }
  24. public function max( $max )
  25. {
  26. $validacja = new integerValidator($max);
  27. if (!$validacja->sprawdz())
  28. {
  29. throw new InvalidArgumentException ("argument funkcji max() musi być liczba");
  30. }
  31. $this->max = $max;
  32. }
  33. public function wymagane($wymagane)
  34. {
  35. if (!is_bool($wymagane))
  36. {
  37. throw new InvalidArgumentException ("argument funkcji wymagane() musi być typu boolean");
  38. }
  39. $this->wymagane = $wymagane;
  40. }
  41. protected function typ(){}
  42. protected function dlugosc($dlugosc)
  43. {
  44. $min = $this->min;
  45. $max = $this->max;
  46.  
  47. if ( !empty( $min ) AND !empty( $max ) )
  48. {
  49. if ( $dlugosc < $min OR $dlugosc > $max )
  50. {
  51. return FALSE;
  52. }
  53. }
  54. if( !empty( $min ) )
  55. {
  56. if ( $dlugosc < $min )
  57. {
  58. return FALSE;
  59. }
  60. }
  61.  
  62. if( !empty( $max ) )
  63. {
  64. if ( $dlugosc > $max )
  65. {
  66. return FALSE;
  67. }
  68. }
  69.  
  70. return TRUE;
  71.  
  72. }
  73. public function sprawdz()
  74. {
  75. if ( empty( $this->zmienna ) AND $this->wymagane == TRUE )
  76.  {
  77.  return FALSE;
  78.  }
  79.  if( !empty( $this->zmienna ) )
  80. {
  81. if ( !$this->typ() )
  82. {
  83. return FALSE;
  84. }
  85. if ( !$this->dlugosc() )
  86.  {
  87.  return FALSE;
  88.  }
  89. }
  90.  
  91. return TRUE;
  92. }
  93. }
  94.  
  95. class stringValidator extends Validator
  96. {
  97. protected function dlugosc()
  98. {
  99. $dlugosc = strlen( $this->zmienna );
  100. if (!parent::dlugosc($dlugosc))
  101. {
  102. return FALSE;
  103. }
  104. return TRUE;
  105. }
  106.  
  107. protected function typ()
  108. {
  109. if ( ctype_digit( (string)$this->zmienna ) )
  110. {
  111. return FALSE;
  112. }
  113. return TRUE;
  114. }
  115. }
  116. class emailValidator extends stringValidator
  117. {
  118.  
  119. public function typ()
  120. {
  121. if ( eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$", $this->zmienna ) )
  122. {
  123. return FALSE;
  124. }
  125. return TRUE;
  126. }
  127. }
  128. class integerValidator extends Validator
  129. {
  130. protected function dlugosc()
  131. {
  132. $dlugosc = $this->zmienna;
  133. if (!parent::dlugosc($dlugosc))
  134. {
  135. return FALSE;
  136. }
  137. return TRUE;
  138. }
  139.  
  140. protected function typ()
  141. {
  142. if ( !ctype_digit( (string)$this->zmienna ) )
  143. {
  144. return FALSE;
  145. }
  146. return TRUE;
  147. }
  148. }
  149. class passValidator extends stringValidator
  150. {
  151. public function __construct($pass,$pass2)
  152. {
  153. $this->zmienna["pass"] = $pass;
  154. $this->zmienna["pass1"] = $pass2;
  155. }
  156.  
  157. protected function porownanie()
  158. {
  159. if ($this->zmienna["pass"] == $this->zmienna["pass1"])
  160. {
  161. return TRUE;
  162. }
  163. return FALSE;
  164. }
  165.  
  166. public function sprawdz()
  167. {
  168. if (!$this->porownanie())
  169. {
  170. return FALSE;
  171. }
  172. $this->zmienna = $this->zmienna["pass"];
  173. if (!parent::sprawdz())
  174. {
  175. return FALSE;
  176. }
  177. return TRUE;
  178. }
  179.  
  180.  
  181. }
  182.  
  183. class peselValidator extends integerValidator
  184. {
  185. protected function dlugosc()
  186. {
  187. $this->min(11);
  188. $this->max(11);
  189. $dlugosc = strlen( $this->zmienna );
  190. if (!parent::dlugosc($dlugosc))
  191. {
  192. return FALSE;
  193. }
  194. return TRUE;
  195. }
  196. protected function typ()
  197. {
  198.  
  199. }
  200. }
  201. class nipValidator extends integerValidator
  202. {
  203. protected function dlugosc()
  204. {
  205. $this->min(10);
  206. $this->max(10);
  207. $dlugosc = strlen( $this->zmienna );
  208. if (!parent::dlugosc($dlugosc))
  209. {
  210. return FALSE;
  211. }
  212. return TRUE;
  213. }
  214. protected function typ()
  215. {
  216. if (!parent::typ())
  217. {
  218. return FALSE;
  219. }
  220.  
  221. $arrSteps = array(6, 5, 7, 2, 3, 4, 5, 6, 7);
  222. $intSum=0;
  223. for ($i = 0; $i < 9; $i++)
  224. {
  225. $intSum += $arrSteps[$i] * $str[$i];
  226. }
  227. $int = $intSum % 11;
  228.  
  229. $intControlNr=($int == 10)?0:$int;
  230. if ($intControlNr == $str[9])
  231. {
  232. return true;
  233. }
  234. return false;
  235. }
  236. }
  237. class regonValidator extends integerValidator
  238. {
  239. protected function dlugosc()
  240. {
  241. $this->min(9);
  242. $this->max(9);
  243. $dlugosc = strlen( $this->zmienna );
  244. if (!parent::dlugosc($dlugosc))
  245. {
  246. return FALSE;
  247. }
  248. return TRUE;
  249. }
  250. protected function typ()
  251. {
  252. if (!parent::typ())
  253. {
  254. return FALSE;
  255. }
  256.  
  257. $arrSteps = array(8, 9, 2, 3, 4, 5, 6, 7);
  258. $intSum=0;
  259. for ($i = 0; $i < 8; $i++)
  260. {
  261. $intSum += $arrSteps[$i] * $str[$i];
  262. }
  263. $int = $intSum % 11;
  264. $intControlNr=($int == 10)?0:$int;
  265. if ($intControlNr == $str[8]) 
  266. {
  267. return true;
  268. }
  269. return false;
  270. }
  271. }
  272. class nrbValidator extends integerValidator
  273. {
  274. public function __construct($zmienna)
  275. {
  276. $this->zmienna = str_replace(' ', '', $zmienna);
  277. }
  278. protected function dlugosc()
  279. {
  280. $this->min(26);
  281. $this->max(26);
  282. $dlugosc = strlen( $this->zmienna );
  283. if (!parent::dlugosc($dlugosc))
  284. {
  285. return FALSE;
  286. }
  287. return TRUE;
  288. }
  289. protected function typ()
  290. {
  291. if (!parent::typ())
  292. {
  293. return FALSE;
  294. }
  295.  
  296. $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);
  297. // Dodanie kodu kraju (w tym przypadku dodajemu kod PL)
  298. $iNRB = $iNRB.'2521';
  299. $iNRB = substr($iNRB, 2).substr($iNRB, 0, 2); 
  300. $iSumaCyfr = 0;
  301. for($i = 0; $i < 30; $i++) 
  302. {
  303. $iSumaCyfr += $iNRB[29-$i] * $aWagiCyfr[$i];
  304. }
  305. return ($iSumaCyfr % 97 == 1);
  306. }
  307. }
  308.  
  309.  
  310.  
  311. ?>


Przykład wykorzystania:
  1. <?php
  2. $tekst = "jakis tekst";
  3. $validacja = new stringValidator($tekst);
  4. $validacja->min(2);
  5. $validacja->max(10);
  6. $validacja->wymagane(FALSE);
  7. if ( $validacja->sprawdz() )
  8. {
  9. echo "Wszystko ok";
  10. }else{
  11. echo "Błąd. Nieprawidłowe dane";
  12. }
  13. ?>


Klasy napisane są obiektowo pod php5 które mozemy dowolnie rozszerzac i dodawac nowe typy walidacji.
Dla większej czytelnosci kodu zamieszczam strukture klas:
  1. abstract class validator
  2. {
  3.      protected $wymagane = 1;
  4.      protected $min;
  5.      protected $max;
  6.      protected $zmienna;
  7.  
  8.      public function __construct($zmienna)
  9.      public function min( $min )
  10.      public function max( $max )
  11.      public function wymagane($wymagane)
  12.      protected function typ(){}
  13.      protected function dlugosc($dlugosc)
  14.      public function sprawdz()
  15.  
  16. class stringValidator extends Validator
  17.      protected function dlugosc()
  18.      protected function typ()
  19.  
  20. class emailValidator extends stringValidator
  21.      public function typ()
  22.  
  23. class integerValidator extends Validator
  24.      protected function dlugosc()
  25.      protected function typ()
  26.  
  27. class passValidator extends stringValidator
  28.      public function __construct($pass,$pass2)
  29.      protected function porownanie()
  30.      public function sprawdz()
  31.  
  32. class peselValidator extends integerValidator
  33.      protected function dlugosc()
  34.      protected function typ()
  35.  
  36. class nipValidator extends integerValidator
  37.      protected function dlugosc()
  38.      protected function typ()
  39.  
  40. class regonValidator extends integerValidator
  41.      protected function dlugosc()
  42.      protected function typ()
  43.  
  44. class nrbValidator extends integerValidator
  45.      public function __construct($zmienna)
  46.      protected function dlugosc()
  47.      protected function typ()


Ten post edytował skubekk 2.11.2006, 09:59:35
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:33