To tak:
1. Miałem tragiczny błąd w metodzie, nie pozamieniałem z powrotem $this->zmienna na $zmienna, już to poprawiłem.
2. Dodałem metodę za pomocą której możesz bez przerabiania klasy dodawać nowe typy pól, np. ów nip.
3. Mógłbyś wytłumaczyć o co chodzi z
Cytat
walidatory powinny być osobnymi obiektami implementującymi jakiś interfejs
<?
class Walidacja
{
/* Dozwolone opcje:
* min_znakow - minimalna ilosc znakow
* max_znakow - maksymalna ilosc znakow
* wzor - wzor wg ktorego ma byc walidowana zmienna
Wywolanie obiektu
$ob = new Walidacja;
$ob->waliduj(zmienna, kryterium);
Mozna swobodnie dodawac nowe pola/typy pol do ustawien, np
kod pocztowy i zaopatrzyc go w atrybut wzor w ktorym bylby
wzor w postaci wyrazen regularnych, ktory mialby za zadanie
sprawdzac zmienna czy ma poprawny format.
*/
public $ustawienia = array( "min_znakow" => 3,
"max_znakow" => 25
),
"min_znakow" => 5,
"max_znakow" => 15
),
"wzor" => "^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",
),
);
private $bledy = array();
public function dodaj($typ, $min = null, $max = null, $wzor = null)
{
throw new Exception("Musisz podac dodatkowy atrybut(maksymalna ilosc znakow, minimalna lub wzor");
} else {
$typ = (string)$typ;
if(isset($min)) $this->ustawienia[$typ]["min_znakow"] = (int
)$min; if(isset($max)) $this->ustawienia[$typ]["max_znakow"] = (int
)$max; if(isset($wzor)) $this->ustawienia[$typ]["wzor"] = $wzor; }
}
public function zabron($zabronione)
{
array_push($this->ustawienia["zabronione"], $zabronione); } else {
foreach($zabronione as $wartosc)
array_push($this->ustawienia["zabronione"], $wartosc); }
}
public function waliduj($zmienna, $typ = null)
{
throw new Exception("Weryfikowana zmienna nie moze byc tablica. Bo tak.");
}
foreach($this->ustawienia["zabronione"] as $zabronione) {
$this->bledy[] = "Formularz zawiera niedozwolone znaki/slowa: ".$zabronione.".";
break;
}
}
if(isset($this->ustawienia[$typ])) { $ustawienia = $this->ustawienia;
foreach($this->ustawienia[$typ] as $klucz => $wartosc) {
if($klucz == "min_znakow") {
if(strlen($zmienna) < $this->ustawienia[$typ]["min_znakow"]) $this->bledy[] = ucfirst($typ)." musi miec conajmniej ".$this->ustawienia[$typ]["min_znakow"]." znakow."; }
if($klucz == "max_znakow"){
if(strlen($zmienna) > $this->ustawienia[$typ]["max_znakow"]) $this->bledy[] = ucfirst($typ)." moze miec conajwyzej ".$this->ustawienia[$typ]["max_znakow"]." znakow."; }
if($klucz == "wzor"){
if(!preg_match("#".$this->ustawienia[$typ]["wzor"]."#", $zmienna)) $this->bledy[] = ucfirst($typ)." ma niepoprawny format."; }
}
}
}
return $zmienna;
}
public function pokazbledy()
{
return $this->bledy;
}
}
try {
$obWaliduj = new Walidacja();
$obWaliduj->dodaj("tresc", 1, 10);
$obWaliduj->waliduj("hesdsadsaddads", "tresc");
$obWaliduj->dodaj("tresc", 4, 7);
$obWaliduj->waliduj("aa", "tresc");
$bledy = $obWaliduj->pokazbledy();
foreach($bledy as $blad) {
}
} catch(Exception $e) {
echo "Blad: ".$e->getMessage(); }
Ten post edytował MateuszS 21.04.2010, 18:36:42