Ja u siebie trochę inaczej to rozwiązałem, ale:
1) Pliki są w kodowaniu UTF-8, dlatego też zamiast np.
strlen" title="Zobacz w manualu PHP" target="_manual używaj
mb_strlen" title="Zobacz w manualu PHP" target="_manual<?
$str = 'Witaj świecie';
echo mb_strlen
($str); //13 - bo tyle jest znaków ?>
(pozwole sobie przyspamować
http://blog.crozin.com/2008/08/11/operacje...odowanie-utf-8/ 
)
2) Sprzydałoby się trochę więcej danych w przypadku błędu, dla przykładu:
<?
//pseudo-kod
$v->maxLength('ala ma kota', 8);
?>
Zdanie
ala ma kota ma więcej niż te 8 znaków, ale samo
Too long może być czasem trochę niewygodne (np. gdy chcemy zautomatyzować wyświetlanie błędów użytkownikowi). Tutaj mógłbyś zwrocić: False (czyli, że błąd) + Spodziewaną długość (8) + Długość jaką miał ciąg (13) + ew. sam ciąg - aby wygodnie wyświetlić szczegółowy komunikat
Cytat
Jakieś tam pole może mieć maksymalnie 8 znaków - podano 13.
3) Apropo sposobu zgłaszania błedów - sprzydała by się możliwość ustawiania "indywidualnych" błedów - posłużę się tutaj moim przykładem :
<?php
'rules' => '0',
'username' => 'Crozin',
'password' => 'myPassword',
'repeatPassword' => 'myPasssword',
'email' => 'sb@sth.com',
'repeatEmail' => 'sb@sth.com'
);
$this->validate->customMessages(array( 'rules' => array(Kernel_Validate_Equal
::NOT_EQUAL => 'Musisz zaakceptować regulamin, aby się zarejestrować') ));
$validate = $this->validate->chain($_POST, array( 'login' => 'length[4,30]|word',
'password' => 'length[6,255]',
'repeatPassword' => 'sameAs[password]',
'email' => 'email',
'repeatEmail' => 'sameAs[email]',
'rules' => 'equal[1]'
?>
I kilka słów wyjaśnienia.
Kernel_Validate::customMessage() (btw: właśnie się zooriętowałem, że mam customMassages w orginalnym kodzie

) jako pierwszy i jedyny argument przyjmuje tablice, w której każdy klucz odpowiada zmiennej z $_POST (w tym przypadku) a wartość danego klucza to kolejna tablica, w której jako klucz podawane są stałe, np: Kernel_Validate_Equal::NOT_EQUAL - co oznacza, że jeżeli walidator Equal wyrzuci bład NOT_EQUAL to zamiast domyślnej wiadomości
Pole [nazwaPola] musi mieć wartość [wartość]. zostanie zwrócone
Musisz zaakceptować regulamin, aby się zarejestrować.
Sam walidator działa w miarę podobnie do Twojego, z tym, że reguły walidacji możemy podać jako tablice (jak u Ciebie), albo jako string z "pseudo-kodem", a same walidatory (Equal, sameAs, Email itp.) to klasy implementujące interfejs i dziedziczące po abstrakcyjnej klasie

PS. Nie wiem dlaczego, ale Twój sposób formatowania kodu jest dla mnie strasznie nieczytelny