Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Validator
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Strzałek
Prosta klasa do walidowania danych pochodzących od użytkownika.

  1. <?php
  2. /**
  3.  * Validator
  4.  * 
  5.  * @author Strzałek
  6.  * @package Tellur
  7.  * @subpackage Model
  8.  * @version 1.0.0
  9. */
  10.  
  11.  class Validator {
  12.  
  13.  /**
  14. * Bledy ktore wystpaia podczas
  15. * walidacji danych
  16. *
  17. * @var array
  18. */
  19.  private $errors = array();
  20.  
  21.  /**
  22. * Stan walidacji
  23. *
  24. * @var bool
  25. */
  26.  private $valid = true;
  27.  
  28.  /**
  29. * Metoda sprawdzajaca dlugosc
  30. *
  31. * @param string $string
  32. * @param int $min
  33. * @param int $max
  34. * @param string $error
  35. * @return bool
  36. */
  37.  public function lenght($string, $min, $max, $error){
  38.  
  39.  $lenght = strlen($string);
  40.  
  41.  if($lenght > $min){  
  42.  
  43.  if($lenght < $max){
  44. return true;
  45.  }else{
  46. return $this -> setError($error);
  47.  }
  48.  
  49.  }else{
  50. return $this -> setError($error);
  51.  }
  52.  
  53.  }
  54.  
  55.  /**
  56. * Metoda sprawdzajaca identycznosc
  57. * dwoch stringow
  58. *
  59. * @param string $string1
  60. * @param string $string2
  61. * @param string $error
  62. * @return bool
  63. */
  64.  public function same($string1, $string2, $error){
  65.  
  66.  if($string1 == $string2){
  67. return true;
  68.  }else{
  69. return $this -> setError($error);
  70.  }
  71.  
  72.  }  
  73.  
  74.  /**
  75. * Sprawdzanie stringa wyrazeniem
  76. * regularnym
  77. *
  78. * @param string $string
  79. * @param string $regex
  80. * @param string $error
  81. * @return bool
  82. */
  83.  public function pattern($string, $regex, $error){
  84.  
  85.  if(preg_match($regex, $string)){
  86. return true;
  87.  }else{
  88. return $this -> setError($error);
  89.  }
  90.  
  91.  }  
  92.  
  93.  /**
  94. * Sprawdzanie czy zwalidowano
  95. *
  96. * @return bool
  97. */
  98.  public function isValid(){
  99.  return $this -> valid;
  100.  }
  101.  
  102.  /**
  103. * Ustawienie bledy walidacji
  104. *
  105. * @param string $message
  106. * @return bool
  107. */
  108.  private function setError($message){
  109.  $this -> errors[] = $message;
  110.  return $this -> valid = false;
  111.  }
  112.  
  113.  /**
  114. * Zwrocenie tablicy z bledami
  115. *
  116. * @return array
  117. */
  118.  public function getErrors(){
  119.  return $this -> errors;
  120.  }
  121.  
  122.  }
  123.  
  124.  /* Przykład użycia */
  125.  
  126.  $v = new Validator();
  127.  $v -> lenght('L', 2, 32, 'Login musi mieć od 2 do 32 liter');
  128.  $v -> same('moje1tajne2hasl', 'moje1tajne2haslo', 'Hasla nie sa identyczne');
  129.  $v -> pattern('heniek@ze-wsi.com', '#^[A-Za-z0-9._-]+@[[A-Za-z0-9.-]+$#', 'To nie jest poprawny adres email');
  130.  
  131.  if($v -> isValid()){
  132.  //reestrujemy Heńka
  133.  echo 'rejestracja';
  134.  }else{
  135.  var_dump($v -> getErrors()); //wyswietlamy błedy ;)
  136.  }
  137.  
  138.  
  139. ?>
pawkow
  1. <?php
  2. function lenght($string, $min, $max, $error)
  3. {
  4.  
  5. $lenght = strlen($string);
  6.  
  7. if($lenght > $min && $lenght < $max)
  8. {
  9. return true;
  10. }
  11. else
  12. {
  13. return $this -> setError($error);
  14. }
  15. }
  16. ?>


Tak będzie chyba lepiej winksmiley.jpg
NuLL
Sugerujesz ze przy kazdej walidacji mialo by sie pisac komunitkaty ? No way biggrin.gif - pomysl o jakies automatyzacji ( + w.jezykowe party.gif ) albo zycia Ci zbraknie tongue.gif
arecki
Może będzie lekki offtopic ale zastanawia mnie zawsze czemu wielu ludzi nie używa zrzucania wyjątków ? Programując obiektowo aż się prosi o to aby z tego mechanizmu skorzystać.
pawkow
Np. podczas rejestracji lub wyszukiwania warto wyświetlić komunikat, nie winksmiley.jpg ?
arecki
No tak ale można obsłużyć to przez try {} catch {} smile.gif
starach
To nie łatwiej przez:
set_error_handler
trigger_error

Strzałek to nie lepiej pomyśleć nad zrobieniem klasy która ułatwiała by porównywanie ciągów za pomocą wyrażeń regularnych ? No offence, ale ja tutaj specjalnie dużej funkcjonalności i przydatności nie widzę.
NuLL
Cytat(arecki @ 18.03.2007, 14:32:53 ) *
Może będzie lekki offtopic ale zastanawia mnie zawsze czemu wielu ludzi nie używa zrzucania wyjątków ? Programując obiektowo aż się prosi o to aby z tego mechanizmu skorzystać.

To ja tez offtopne, choc nie mowie ze masz zle intencje - stosowanie wyjatkow na sile jest be tongue.gif
Zyx
Wyjątki tutaj tylko by przeszkadzały. Przecież jak mamy formularz, to najlepiej od razu jest wyświetlić wszystkie błędne pola, a nie przerywać sprawdzanie już po napotkaniu pierwszego. Ja bym się lekko wkurzył, gdyby mi się wyświetliła informacja o błędnej wartości, poprawiłbym, już zaczynam się cieszyć, a tu lipa - kolejne zgłasza błąd i tak w kółko.
arecki
Dlatego pisałem że lekki offtopic będzie. Nie chodziło mi konkretnie o ten przykład ale w wielu skryptach jakie mi się "przewinęły" przez oczy aż się prosiło żeby użyć takiego mechanizmu. Z resztą nikt nie każe używać try{}catch. A jakbym się uparł to i przy walidacji formularzy by to użyć można. Z tym że faktycznie, jak napisał Zyx, można by się zatłuc czymś tępym jeżeli w kółko by mi się formularz z niepoprawnymi danymi pokazywał smile.gif ( w sumie to w metodzie np. validateAll() można zawrzeć private zmienną która by mówiła o błędzie przetwarzania warunków a z klasie dziedziczącej po exception można by jakoś zaimplementować obsługę wszystkich błędów formularza smile.gif)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.